Overlapping ListItems in JList
Hi,
is it possible to overlap the listitems in a JList ? Want to use a JList as an layout edit there overlapping items can occur as fault design. Is that possible ? Haven't found a way.
Greetings
Oli
I dont know "overlop" meaning...Could you tell it clearly??
If you want to overlop one JList on the other, I have some means to do that work, I have a project resolve this work just in time. You can communicate with me: [email protected]
:)
Similar Messages
-
Hi,
I want to develop a design tool which allows the editing and visualization of elements which are ordered linear. Each element has a start and end address so it is possible that elements overlap. This is an error case an should be visualized. First I thought to use JList to display the elements. But I think its quite difficult to realize the overlapping elements (JList entries). Is it possible with JList or it's better to draw gui representation myself ?
Thanks
OliThanks for your post....I have already my own list cell renderer by implementing ListCellRenderer interface. In the getListCellRendererComponent I return a JLabel for each list item with different height (to visualize sizes). I can't see the possibility in this method to realize the overlapping. I get only the index no positions.
-
Hi all,
I want to add a JList box that is empty at compile time and also that has an actionselectionlistener on it to check for changes to the list (once there are items in the list of course). For some reason the technique isnt the same for creating a blank JList as it is for creating a blank JComboBox.
This is what I have for my JComboBox
myCmb = new JComboBox() //globalVariable
myCmb.addActionListener(this);
JPanel inputPane = new JPanel();
inputPane.add(myCmb);
getContentPane().add(inputPane);
show();That works perfectly. However the code below doesnt.
myList = new JList() //globalVariable
myList.addListSelectionListener(this);
JPanel inputPane = new JPanel();
inputPane.add(myList);
getContentPane().add(inputPane);
show();I have no idea why it isnt working.
I want the blank list box big enough to show 7 items in it (even though it is blank) and also about the same width as it is in length.
Thanks :)Hi
thanks for the reply :)
The problem I believe is with the addListSelectionListener. When I try to compile it I get an error saying:
Error(49,9): method addListSelectionListener(client.GUI) not found in class javax.swing.JList
These are my imports:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;I appreciate you being willing to test my short code, here it is below:
package client;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.*;
import java.util.*;
public class GUI extends JFrame implements ActionListener{
JList listItems;
public GUI() {
super("my GUI");
setSize(450,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().setLayout(new GridLayout(4,1));
listItems = new JList();
listItems.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
listItems.setSelectedIndex(0);
listItems.addListSelectionListener(this);
JScrollPane listScrollPane = new JScrollPane(listItems);
JPanel inputPane = new JPanel();
inputPane.add(listItems);
inputPane.add(listScrollPane);
getContentPane().add(inputPane);
show();
public void actionPerformed(ActionEvent event){
Object source = event.getSource();
public static void main(String[] args) {
GUI gUI = new GUI();
}The above code is only supposed to display a blank list box, but it doesnt comile due to the error message written above.
I know it seems strange to want to display a blank listbox but the reason why is because there will also be a populated combobox and depending on what the user select from the combobox the list box will then get populated. This is why I want a blank list box to start with :)
Thanks again for your help mate -
How can i change the order of elements in a JList ?
Hi,
i would like to know if it is possible to change the order of elements in a JList ? Maybe i could use drag and drop to do this ?
Thanks for answering.The simplest way is probably to implement ur own listmodel and then supply the listitems in the order u want. Example:
class MyListModel
extends AbstractListModel
implements ContactListListener {
public int getSize() {
return listitemcount;
public Object getElementAt(int index) {
//here u return the item for the index at the list
//if u for example have an array of strings
//which u wanna have listed in reversed order (reversed to
//the order in the array, u could do
return myarray[getSize()-index];
} -
Customizing JList Cell Renderer
Hi all,
I got a problem with JList not rendering properly in my program. basically I create a customized renderer by extending JPanel and implementing ListCellRenderer.
but somehow i cannot get the tooltiptext from the JLabel inside my JPanel (the renderer) to display the tooltiptext and responding to my mouse gesture. here's a snippet of my code.
did i do something wrong?
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class TestR {
private static class ListItem {
private Color color;
private String value;
public ListItem(Color c, String s) {
color = c;
value = s;
public Color getColor() {
return color;
public String getValue() {
return value;
private static class MyCellRenderer extends JPanel implements
ListCellRenderer {
private JLabel lbl;
public MyCellRenderer() {
// Don't paint behind the component
setOpaque(true);
setLayout(new BorderLayout());
lbl = new JLabel();
add(lbl);
// Set the attributes of the
//class and return a reference
public Component getListCellRendererComponent(JList list, Object value, // value to display
int index, // cell index
boolean iss, // is selected
boolean chf) // cell has focus?
// Set the text and
//background color for rendering
lbl.setText(((ListItem) value).getValue());
lbl.setToolTipText("tooltip: "+((ListItem) value).getValue());
setBackground(((ListItem) value).getColor());
// Set a border if the
//list item is selected
if (iss) {
setBorder(BorderFactory.createLineBorder(Color.blue, 2));
} else {
setBorder(BorderFactory.createLineBorder(list.getBackground(),
2));
return this;
// Create a window
public static void main(String args[]) {
JFrame frame = new JFrame("Custom List Demo");
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
// Use a list model that
//allows for updates
DefaultListModel model = new DefaultListModel();
JList statusList = new JList(model);
statusList.setCellRenderer(new MyCellRenderer());
// Create some dummy list items.
ListItem li = new ListItem(Color.cyan, "test line one");
model.addElement(li);
li = new ListItem(Color.yellow, "foo foo foo");
model.addElement(li);
li = new ListItem(Color.green, "quick brown fox");
model.addElement(li);
// Display the list
JPanel panel = new JPanel();
panel.add(statusList);
frame.getContentPane().add("Center", panel);
frame.pack();
frame.setVisible(true);
}hi!
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class TestR {
private static class ListItem {
private Color color;
private String value;
public ListItem(Color c, String s) {
color = c;
value = s;
public Color getColor() {
return color;
public String getValue() {
return value;
private static class MyCellRenderer extends JPanel implements
ListCellRenderer {
private JLabel lbl;
public MyCellRenderer() {
// Don't paint behind the component
setOpaque(true);
setLayout(new BorderLayout());
lbl = new JLabel();
add(lbl);
// Set the attributes of the
//class and return a reference
public Component getListCellRendererComponent(JList list, Object value, // value to display
int index, // cell index
boolean iss, // is selected
boolean chf) // cell has focus?
// Set the text and
//background color for rendering
lbl.setText(((ListItem) value).getValue());
/*lbl.*/setToolTipText("tooltip: "+((ListItem) value).getValue());
setBackground(((ListItem) value).getColor());
// Set a border if the
//list item is selected
if (iss) {
setBorder(BorderFactory.createLineBorder(Color.blue, 2));
} else {
setBorder(BorderFactory.createLineBorder(list.getBackground(),
2));
return this;
// Create a window
public static void main(String args[]) {
JFrame frame = new JFrame("Custom List Demo");
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
// Use a list model that
//allows for updates
DefaultListModel model = new DefaultListModel();
JList statusList = new JList(model);
statusList.setCellRenderer(new MyCellRenderer());
// Create some dummy list items.
ListItem li = new ListItem(Color.cyan, "test line one");
model.addElement(li);
li = new ListItem(Color.yellow, "foo foo foo");
model.addElement(li);
li = new ListItem(Color.green, "quick brown fox");
model.addElement(li);
// Display the list
JPanel panel = new JPanel();
panel.add(statusList);
frame.getContentPane().add("Center", panel);
frame.pack();
frame.setVisible(true);
}try this out. this may help you. note at line no 50. /*lbl.*/setToolTipText("tooltip: "+((ListItem) value).getValue());:)
Aniruddha -
hi is there a way to make each element in a JList to a different font. i am making a FontDialog and i would like each font name in the list to be the font of that font... like in MS word.
many thanks
DavidUse a customized ListCellRenderer. The following outlines one possible way of doing it:
// Use instances of this class as items in your list:
class FontListItem {
private Font font;
public FontListItem(Font font) {
this.font = font;
public String toString() {
return font.getName();
public Font getFont() {
return font;
// The ListCellRenderer for your JList:
class FontListRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
JLabel renderer = (JLabel)super.getListCellRendererComponent(
list, value, index, isSelected, cellHasFocus);
if( value instanceof FontListItem ) {
renderer.setFont( ((FontListItem)value).getFont() );
return renderer;
// Example of use:
FontListItem[] listItems = ...
JList list = new JList(listItems);
list.setCellRenderer(new FontListRenderer()); -
GIF icon wont display in JList
Hello.
During development of a single application I've encountered a strange bug:
I am unable to display a gif icon in JList using JLabel as the cell renderer. Png icons work.
Could someone please point me to the obvious flaw in my example? :)
Example as netbeans project:
http://www.megaupload.com/?d=GVCDVO1F
Example code:
* GifIconInList.java
* Created on 28. srpen 2008, 11:03
package gificoninlist;
import java.awt.Color;
import java.awt.Component;
import java.net.URL;
import javax.swing.DefaultListModel;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
* @author Bedla
public class GifIconInList extends javax.swing.JFrame {
DefaultListModel listModel = new DefaultListModel();
/** Creates new form GifIconInList */
public GifIconInList() {
initComponents();
class labelCellRenderer extends JLabel implements ListCellRenderer {
public labelCellRenderer() {
setOpaque(true);
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
if (value instanceof JLabel) {
JLabel label = (JLabel) value;
if (isSelected) {
label.setBackground(list.getSelectionBackground());
label.setForeground(list.getSelectionForeground());
} else {
label.setBackground(Color.white);
label.setForeground(Color.black);
return label;
return this;
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jList = new javax.swing.JList();
addPngButton = new javax.swing.JButton();
addGifButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jList.setModel(listModel);
jList.setCellRenderer(new labelCellRenderer());
jScrollPane1.setViewportView(jList);
addPngButton.setText("Add PNG");
addPngButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addPngButtonActionPerformed(evt);
addGifButton.setText("Add GIF");
addGifButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addGifButtonActionPerformed(evt);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 287, Short.MAX_VALUE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(addPngButton)
.addComponent(addGifButton))
.addContainerGap())
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(31, 31, 31)
.addComponent(addPngButton)
.addGap(37, 37, 37)
.addComponent(addGifButton))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE)))
.addContainerGap())
pack();
}// </editor-fold>
private void addPngButtonActionPerformed(java.awt.event.ActionEvent evt) {
URL iconURL = GifIconInList.class.getResource("otevren.PNG");
Icon icon = new ImageIcon(iconURL);
JLabel label = new JLabel("PNG icon: " + icon, icon, JLabel.CENTER);
listModel.addElement(label);
private void addGifButtonActionPerformed(java.awt.event.ActionEvent evt) {
URL iconURL = GifIconInList.class.getResource("otevrenblik.gif");
Icon icon = new ImageIcon(iconURL);
JLabel label = new JLabel("GIF icon: " + icon, icon, JLabel.CENTER);
listModel.addElement(label);
* @param args the command line arguments
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new GifIconInList().setVisible(true);
// Variables declaration - do not modify
private javax.swing.JButton addGifButton;
private javax.swing.JButton addPngButton;
private javax.swing.JList jList;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration
}I had write a program to display gif images inside a JList.
Here is the code
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.*;
import javax.imageio.ImageIO;
import javax.swing.*;
public class ImageList
BufferedImage[] images;
JList list;
public ImageList()
loadImages();
list = new JList(images);
list.setCellRenderer(new ImageRenderer());
private void loadImages()
String[] fileNames = {
"1", "2", "3", "4"
images = new BufferedImage[fileNames.length];
for(int i = 0; i < images.length; i++)
try
String path = "images/" + fileNames + ".gif";
URL url = getClass().getResource(path);
images[i] = ImageIO.read(url);
catch(MalformedURLException mue)
System.out.println("url: " + mue.getMessage());
catch(IOException ioe)
System.out.println("read: " + ioe.getMessage());
public static void main(String[] args)
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new JScrollPane(new ImageList().list));
f.setSize(400,400);
f.setLocation(200,200);
f.setVisible(true);
class ImageRenderer extends DefaultListCellRenderer
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
// for default cell renderer behavior
Component c = super.getListCellRendererComponent(list, value,
index, isSelected, cellHasFocus);
// set icon for cell image
((JLabel)c).setIcon(new ImageIcon((BufferedImage)value));
((JLabel)c).setText("");
return c;
Here is netbeans project:
[http://www.mediafire.com/?nl29dl4tteu]
Note: If you check image 2.gif inside the src/images dir you will found that it is an animated gif but JList is displaying it as static image.
Bedla if you want both image and text then create a class like thisclass ListItem {
private BufferedImage image;
private String value;
public ListItem(
BufferedImage c, String s) {..}
public Color getImage() {..}
public String getValue() {..} -
Images like items of Jlist.
Salut,
I would like to make a Jlist who will have images(small size) like items instead of the usual string.
All of your help and advices are welcome.Thanks.In The API for JList check out:
public void setCellRenderer(ListCellRenderer cellRenderer)also check out
javax.swing
Interface ListCellRenderer
here is a rather dud one I was using:
public class PicListCellRenderer extends JLabel implements ListCellRenderer
final ImageIcon picIcon = new ImageIcon(this.getClass().getResource("images/Pic16.jpg"));
final ImageIcon selectedIcon = new ImageIcon(this.getClass().getResource("images/GirlD16.jpg"));
public Component getListCellRendererComponent( JList list,
Object value, // value to display
int index, // cell index
boolean isSelected, // is the cell selected
boolean cellHasFocus // the list and the cell have the focus
String s = value.toString();
setText(s);
if( isSelected )
this.setIcon( selectedIcon );
else
this.setIcon( picIcon );
if (isSelected)
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
else
setBackground(list.getBackground());
setForeground(list.getForeground());
setEnabled(list.isEnabled());
setFont(list.getFont());
setOpaque(true);
return this;
}Kind of Dud only has 2 Pics, but I guess it shows the idea
then have:
JList Fred = new JList();
Fred.setCellRenderer(new MyListCellRenderer());You can do all sorts of things with these.
I don't think you could just set the ListItems to Images, but here I set them to a JLabel with an ImageIcon on it... -
Hello all
I have a jList where i represent an image and a text, using my own ListCellRenderer . It looks like the following
public class JListImageRenderer extends JLabel implements ListCellRenderer{
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus){
String text = "";
ImageIcon icon = null;
//.....some code here.....//
// and finally
setText(text);
setIcon(icon);
setCursor(new Cursor(Cursor.HAND_CURSOR));
// addMouseListener(new MouseListe(){
return this;
}My questions are:
i)is there any way of adding a second image? I need my list to display two images and the text at every row ,
instead of a single image + text. Obviously i need a different implementation of ListCellRenderer but
which would be that implementation?
ii) why setCursor(new Cursor(Cursor.HAND_CURSOR)); hasn't got any effect on the mouse pointer when i hover over the list rows?
thanks in advance
evsavOk here is a self contained sample
class JListRendererTest
import examples.CheckBoxJList.CheckBoxListCellRenderer;
import java.util.Arrays;
import java.util.Iterator;
import javax.swing.DefaultListModel;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.WindowConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class JListRendererTest {
static JList list;
public static void main(String[] args) {
list = new JList();
list.setCellRenderer (new ListRenderer());
list.addListSelectionListener (new ListListener());
DefaultListModel defModel = new DefaultListModel();
list.setModel(defModel);
JLabel[] listItems = {
new JLabel(), new JLabel(), new JLabel(), new JLabel(),
new JLabel(), new JLabel(), new JLabel(), new JLabel()
Iterator it = Arrays.asList(listItems).iterator();
while (it.hasNext()) {
defModel.addElement(it.next());
// show list
JScrollPane scroller =
new JScrollPane(list,
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
JFrame frame = new JFrame("Custom JList");
frame.getContentPane().add(scroller);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
private static class ListListener implements ListSelectionListener {
private ListSelectionModel selectionModel = new DefaultListSelectionModel();
public ListListener() {
public void valueChanged(ListSelectionEvent e) {
}class ListRenderer
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import javax.swing.DefaultListCellRenderer;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
public class ListRenderer extends JPanel implements ListCellRenderer {
static Color listForeground, listBackground, listSelectionForeground, listSelectionBackground;
DefaultListCellRenderer defaultComp;
JCheckBox checkbox;
JLabel label;
static {
UIDefaults uid = UIManager.getLookAndFeel().getDefaults();
listForeground = uid.getColor("List.foreground");
listBackground = uid.getColor("List.background");
listSelectionForeground = uid.getColor("List.selectionForeground");
listSelectionBackground = uid.getColor("List.selectionBackground");
public ListRenderer() {
setLayout(new FlowLayout());
defaultComp = new DefaultListCellRenderer();
checkbox = new JCheckBox();
label = new JLabel();
label.setText("LABEL");
add(checkbox, BorderLayout.WEST);
add(label, BorderLayout.CENTER);
add(defaultComp, BorderLayout.EAST);
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
defaultComp.getListCellRendererComponent(list, value, index,
isSelected, cellHasFocus);
checkbox.setSelected(isSelected);
Component[] comps = getComponents();
for (int i = 0; i < comps.length; i++) {
comps.setForeground(listForeground);
// comps[i].setBackground(listBackground);
return this;
As you can see the text of each JLabel is not being highlighted when you click on the corresponding row
How can i get this solved? -
hi,
i want to design my list item with background image,font faces and sizes when it selected by using Html tags.
for example,
// Contacts(userName, userIcon)
Contacts contacts[] =
new Contacts("<html> <table width= '75%' height='57' border='1'><tr> <td align='center' background='resources/id.gif'><img src='resources/id.gif' width='22' height='20'>Username", resources/id.gif"),
JList contactsList = new JList(contacts);
i got partially.. i got table data but i couldn't see the images in that.. instaed of images, it shows image broken link. but the same image, i can assign for the userIcon.
why i am including table here means, i want to display the contactitems with all information like Name, image, place when it selected.
and another one, how i implement this to display at Listitem selected.
if anyone know this, pls tell me
regards,
Gokulakrishnan<img src='resources/id.gif' ..... >First, this URL syntax may be wrong for your local file.
You should call:
contactList.setCellRenderer(new MyJEditorPaneRenderer());
As the name suggest, you should write a ListCellRenderer whose method returns a
JEditorPane component which has called its setPage() for your html string which,
in turn, is contacts[index]. -
How can I fix left pane text overlap in iCal Day view?
In "Day" view, the items in the left hand (list) pane in iCal are overlapping, obscuring the bottom 1/3 of each line of text. It is as if the table cells are too close together vertically. How do I fix this?
Start Firefox in <u>[[Safe Mode]]</u> to check if one of the extensions or if hardware acceleration is causing the problem (switch to the DEFAULT theme: Firefox (Tools) > Add-ons > Appearance/Themes).
*Don't make any changes on the Safe mode start window.
*https://support.mozilla.org/kb/Safe+Mode
Try to disable hardware acceleration.
*Tools > Options > Advanced > General > Browsing: "Use hardware acceleration when available"
If disabling hardware acceleration works then check if there is an update available for your graphics display driver. -
Overlap, bookmarker or something like this...
hi,
i read a lot of ebooks and i've got this question:
can i mark a overlap or bookmarker (just like in normal books) in adobe so when i close ebook it will open next time exactly where i finished reading recently?
i'm new so sorry if this thread repeats...Look here:
http://forums.adobe.com/message/3321356#3321356 -
Awesome systray is not showing all icons, perhaps overlapping widgets?
I have a problem with my Awesome configuration that results in some of the icons being missing or partially missing from my systray. I suspect this is because of some overlapping, since they are partially hidden. You can see the problem in the top right corner.
rc.lua:
-- Standard awesome library
require("awful")
require("awful.autofocus")
require("awful.rules")
-- Theme handling library
require("beautiful")
-- Notification library
require("naughty")
--Wiget Library
require("vicious")
-- awesoMPD Widget
--require("awesompd/awesompd")
-- {{{ Variable definitions
-- Themes define colours, icons, and wallpapers
beautiful.init("/usr/share/awesome/themes/blind-alien/theme.lua")
-- This is used later as the default terminal and editor to run.
terminal = "urxvt"
editor = os.getenv("EDITOR") or "vim"
editor_cmd = terminal .. " -e " .. editor
-- Enable or disable widgets:
-- You also have to edit the wiboxes!
useSysInfo = true
usePacman = true
useMpd = true
useWifi = false
useNet = true
useBat = false
useCpu = true
useMem = true
useTemp = false
-- Widget Settings
cpuCores = 2 --Number of CPU Cores
thermalZone = "coretemp.0" --Thermal Zone to read cpu temperature from (check vicious docu)
thermalData = "core" --Data Source: "proc", "core" or "sys"
netAdapter = "eth0" --Network adapter to monitor
wifiAdapter = "wlan0" --Wifi adapter for wifi widget
pacUpdate = "yaourt -Sy" --Command to update pacman cache
pacUpgrade = "yaourt -Su" --Command to upgrade system
networkManager = terminal .. " -e wicd-curses"
battery = "BAT1" --Battery to monitor
widthMpd = 420 --Width of MPD widget
-- Widget update intervals in seconds
updateCpu = 1
updatePac = 1801
updateMpd = 1
updateWifi = 7
updateNet = 1
updateBat = 31
updateMem = 7
-- For Dual-Screen setups:
-- Set "dualScreen" to "2" if you want a different, optimized widget layout for every screen.
-- If you set it to "-1" it will copy the same widget layout to both screens. (default Awesome behavior)
dualScreen = -1
screencount = screen.count()
-- Default modkey.
-- Usually, Mod4 is the key with a logo between Control and Alt.
-- If you do not like this or do not have such a key,
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
-- However, you can use another modifier like Mod1, but it may interact with others.
modkey = "Mod4"
-- Table of layouts to cover with awful.layout.inc, order matters.
layouts =
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
awful.layout.suit.fair,
awful.layout.suit.fair.horizontal,
awful.layout.suit.magnifier,
awful.layout.suit.floating,
awful.layout.suit.max
-- {{{ Tags
-- Define a tag table which will hold all screen tags.
tags = {
--names = { "1", "2", "3", "4", "5", "6"},
--names = { "⌘", "♐", "⌥", "ℵ"},
--names = { "⠪", "⠫", "⠬", "⠭", "⠮", "⠳"},
names = { "⠐", "⠡", "⠪", "⠵", "⠻", "⠿" },
--names = { " ∙", "⠡", "⠲", "⠵", "⠻", "⠿"},
--names = { " ⠐ ", " ⠡ ", " ⠲ ", " ⠵ ", " ⠾ ", " ⠿ "},
--names = { "⢷", "⣨", "⡪", "⣌", "⣪", "⡝"},
layout = {
layouts[8], layouts[8], layouts[8], layouts[5], layouts[8], layouts[8]
for s = 1, screencount do
tags[s] = awful.tag(tags.names, s, tags.layout)
end
-- {{{ Menu
-- Create a laucher widget and a main menu
myawesomemenu = {
{ "manual", terminal .. " -e man awesome" },
{ "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" },
{ "restart WM", awesome.restart },
{ "logout", awesome.quit },
{ "shutdown" , "sudo /sbin/halt -p" },
{ "reboot" , "sudo /sbin/reboot" }
myinternet = {
{ "Chromium", "chromium" },
{ "Firefox" , "firefox" },
{ "IM" , "pidgin" },
{ "IRC" , "xchat"}
mymedia = {
{ "Spotify", "spotify" },
{ "Rhythmbox", "rhythmbox" },
{ "ncmpcpp", "urxvt -e ncmpcpp" },
{ "Gnome Mplayer", "gnome-mplayer" },
{ "VLC" , "vlc" }
mygraphics = {
{ "GIMP" , "gimp" },
{ "Inkscape" , "inkscape" },
{ "Image viewer" , "eog" }
myoffice = {
{ "Base" , "lobase" },
{ "Calc" , "localc" },
{ "Impress" , "loimpress" },
{ "LibreOffice" , "loffice" },
{ "Writer" , "lowriter" },
{ "Lyx" , "lyx" },
{ "Document viewer" , "evince" }
mysystem = {
{ "htop" , "urxvt -e htop" },
{ "Partition" , "gksudo gparted" },
{ "Sys mon" , "gnome-system-monitor" }
myutilities = {
{ "Gedit" , "gedit" },
{ "Virtualbox" , "VirtualBox" },
{ "File Manager" , "nautilus --no-desktop" }
myplaces = {
{ "Home" , "nautilus --no-desktop /home/johan/" },
{ "Documents" , "nautilus --no-desktop /home/johan/Documents/" },
{ "Downloads" , "nautilus --no-desktop /home/johan/Downloads/" },
{ "Music" , "nautilus --no-desktop /home/johan/Music/" },
{ "Pictures" , "nautilus --no-desktop /home/johan/Pictures/" }
myserverplaces = {
{ "Server root" , "nautilus --no-desktop /srv/" },
{ "Downloads" , "nautilus --no-desktop /srv/download/" },
{ "Movies" , "nautilus --no-desktop /srv/movies/" },
{ "Tv-Series" , "nautilus --no-desktop /srv/tv-series/" },
{ "Misc" , "nautilus --no-desktop /srv/misc/" }
mymainmenu = awful.menu({ items = {
{ "Terminal", terminal },
{ "Places" , myplaces },
{ "Server" , myserverplaces },
{ "Internet" , myinternet },
{ "Media" , mymedia },
{ "Graphics" , mygraphics },
{ "Office" , myoffice },
{ "Utilities" , myutilities },
{ "Systools" , mysystem },
{ "Awesome", myawesomemenu }
mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon),
menu = mymainmenu })
-- Separators
bubble = widget({ type = "textbox" })
spacer = widget({ type = "textbox" })
space = widget({ type = "textbox" })
separator = widget({ type = "textbox" })
bracketl = widget({ type = "textbox" })
bracketr = widget({ type = "textbox" })
vertline = widget({ type = "textbox" })
dash = widget({ type = "textbox" })
bubble.text = " ∘ "
spacer.text = " "
space.text = " "
--separator.text = "<span font_desc='ClearlyU'> ⡾ </span>"
separator.text = "] ["
vertline.text = "|"
dash.text = "-"
bracketl.text = "["
bracketr.text = "]"
-- Status Labels
cpuLabel = {}
for s = 1, cpuCores do
cpuLabel[s] = widget({ type = "textbox" })
cpuLabel[s].text = "Core " .. s
end
rlabel = widget({ type = "textbox" })
rlabel.text = "Root:"
hlabel = widget({ type = "textbox" })
hlabel.text = "Home:"
-- WIDGETS --
-- OS info
if useSysInfo == true then
sys = widget({ type = "textbox" })
vicious.register(sys, vicious.widgets.os, "$1 $2")
end
-- Pacman updates
if usePacman == true then
-- Widget
pnoghosticon = widget({ type = "imagebox" })
pnoghosticon.image = image(beautiful.widget_pacnoghost)
pnoghosticon.visible = true
pghosticon = awful.widget.launcher({
image = beautiful.widget_pacghost,
command = terminal .. " -e " .. pacUpgrade .. " && echo -e 'vicious.force({ pacup, })' | awesome-client"
pghosticon.visible = false
-- Icon
-- picon = widget({ type = "imagebox" })
-- picon.image = image(beautiful.widget_pacnew)
-- Use the Pacman icon as launcher to update the package list (change to fit your package-management system)
picon = awful.widget.launcher({
image = beautiful.widget_pacnew,
command = pacUpdate .. " && echo -e 'vicious.force({ pacup, })' | awesome-client"
runpicon = awful.widget.launcher({
image = beautiful.widget_pacman_run,
command = pacUpdate .. " && echo -e 'vicious.force({ pacup, })' | awesome-client"
runpicon.visible = false
pacup = widget({ type = "textbox" })
vicious.register(pacup, vicious.widgets.pkg,
function(widget, args)
local nr = tonumber(args[1])
if nr ~= 0 then
pnoghosticon.visible = false
pghosticon.visible = true
picon.visible = false
runpicon.visible = true
else
pghosticon.visible = false
pnoghosticon.visible = true
runpicon.visible = false
picon.visible = true
end
end, updatePac, "Arch")
end
-- MPD Widget
if useMpd == true then
-- PLAY, STOP, PREV/NEXT Buttons
-- requires modification of /usr/share/awesome/lib/awful/widget/launcher.lua
-- b = util.table.join(w:buttons(), button({}, 1, nil, function () util.spawn(args.command) end))
-- to:
-- b = util.table.join(w:buttons(), button({}, 1, nil, function () util.spawn_with_shell(args.command) end))
music_play = awful.widget.launcher({
image = beautiful.widget_play,
command = "mpc toggle && echo -e 'vicious.force({ mpdwidget, })' | awesome-client"
music_pause = awful.widget.launcher({
image = beautiful.widget_pause,
command = "mpc toggle && echo -e 'vicious.force({ mpdwidget, })' | awesome-client"
music_pause.visible = false
music_stop = awful.widget.launcher({
image = beautiful.widget_stop,
command = "mpc stop && echo -e 'vicious.force({ mpdwidget, })' | awesome-client"
music_prev = awful.widget.launcher({
image = beautiful.widget_prev,
command = "mpc prev && echo -e 'vicious.force({ mpdwidget, })' | awesome-client"
music_next = awful.widget.launcher({
image = beautiful.widget_next,
command = "mpc next && echo -e 'vicious.force({ mpdwidget, })' | awesome-client"
mpdicon = widget({ type = "imagebox" })
mpdicon.image = image(beautiful.widget_mpd)
-- Initialize widget
mpdwidget = widget({ type = "textbox" })
--mpdwidget.wrap = "none"
mpdwidget.width = widthMpd
--mpdwidget.wrap = "word_char"
-- Register Widget
--vicious.register(mpdwidget, vicious.widgets.mpd, "(${state}) : ${Artist} - ${Title} ]", 13)
-- Set the maximum width of the MPD widget inside the string.format function as "%.<length>s"
vicious.register(mpdwidget, vicious.widgets.mpd,
function(widget, args)
--local maxlength = 85
local font = beautiful.font
local string = args["{Artist}"] .. " - " .. args["{Title}"]
--local string = "[" .. args["{state}"] .. "]" .. " : " .. args["{Artist}"] .. " - " .. args["{Title}"]
--[[ if maxlength < string.len(string) then
return "<span font_desc='" .. font .. "'>" .. string.sub(string, 0, maxlength-6) .. "</span> ..."
else
return "<span font_desc='" .. font .. "'>" .. string .. "</span>"
end]]
if args["{state}"] == "Play" then
music_play.visible = false
music_pause.visible = true
else
music_play.visible = true
music_pause.visible = false
end
return string
end, updateMpd)
end
---- WIFI Widget
--if useWifi == true then
-- wifiwidget = widget({ type = "textbox" })
-- wifiwidget.width = 22
-- wifiwidget.align = "right"
-- --wifiimage = widget({ type = "imagebox" })
-- wifiimage0 = awful.widget.launcher({
-- image = beautiful.widget_wifi0,
-- command = networkManager
-- wifiimage0.image.visible = true
-- wifiimage1 = awful.widget.launcher({
-- image = beautiful.widget_wifi1,
-- command = networkManager
-- wifiimage1.image.visible = false
-- wifiimage2 = awful.widget.launcher({
-- image = beautiful.widget_wifi2,
-- command = networkManager
-- wifiimage2.image.visible = false
-- wifiimage3 = awful.widget.launcher({
-- image = beautiful.widget_wifi3,
-- command = networkManager
-- wifiimage3.image.visible = false
-- wifiimage4 = awful.widget.launcher({
-- image = beautiful.widget_wifi4,
-- command = networkManager
-- wifiimage4.image.visible = false
-- -- Register Widget
-- -- change to the desired network adapter if needed
-- --vicious.register(wifiwidget, vicious.widgets.wifi, "~ ${link}%", 5, "wlan0")
-- vicious.register(wifiwidget, vicious.widgets.wifi,
-- function(widget, args)
-- if tonumber(args["{link}"]) > 75 then
-- wifiimage0.visible = false
-- wifiimage1.visible = false
-- wifiimage2.visible = false
-- wifiimage3.visible = false
-- wifiimage4.visible = true
-- elseif tonumber(args["{link}"]) > 50 then
-- wifiimage0.visible = false
-- wifiimage1.visible = false
-- wifiimage2.visible = false
-- wifiimage3.visible = true
-- wifiimage4.visible = false
-- elseif tonumber(args["{link}"]) > 25 then
-- wifiimage0.visible = false
-- wifiimage1.visible = false
-- wifiimage2.visible = true
-- wifiimage3.visible = false
-- wifiimage4.visible = false
-- elseif tonumber(args["{link}"]) > 0 then
-- wifiimage0.visible = false
-- wifiimage1.visible = true
-- wifiimage2.visible = false
-- wifiimage3.visible = false
-- wifiimage4.visible = false
-- else
-- wifiimage0.visible = true
-- wifiimage1.visible = false
-- wifiimage2.visible = false
-- wifiimage3.visible = false
-- wifiimage4.visible = false
-- end
-- return string.format("%02d%%", tonumber(args["{link}"]))
-- end, updateWifi, wifiAdapter)
--end
-- NETWORK Widget
if useNet == true then
dnicon = widget({ type = "imagebox" })
upicon = widget({ type = "imagebox" })
dnicon.image = image(beautiful.widget_down)
upicon.image = image(beautiful.widget_up)
-- Initialize widget
netdnwidget = widget({ type = "textbox" })
netdnwidget.width = 55
--netdnwidget.align = "right"
netupwidget = widget({ type = "textbox" })
netupwidget.width = 55
--netupwidget.align = "right"
-- Register widget
-- change to the desired network adapter if needed
--vicious.register(netdnwidget, vicious.widgets.net, "${eth0 down_kb} kB/s", 1)
--vicious.register(netupwidget, vicious.widgets.net, "${eth0 up_kb} kB/s", 1)
-- The following code formats the output to fill with zeroes at the beginning i.e. 013 kB/s instead of 13 kB/s.
-- It also automatically switches to MB/s if there is more than 999 kB/s
vicious.register(netdnwidget, vicious.widgets.net,
function(widget, args)
if tonumber(args["{" .. netAdapter .. " down_kb}"]) > 999 then
return string.format("%04.1f MB/s", tonumber(args["{" .. netAdapter .. " down_mb}"]))
else
return string.format("%03d kB/s", tonumber(args["{" .. netAdapter .. " down_kb}"]))
end
end, updateNet)
vicious.register(netupwidget, vicious.widgets.net,
function(widget, args)
if tonumber(args["{" .. netAdapter .. " up_kb}"]) > 999 then
return string.format("%04.1f MB/s", tonumber(args["{" .. netAdapter .. " up_mb}"]))
else
return string.format("%03d kB/s", tonumber(args["{" .. netAdapter .. " up_kb}"]))
end
end, updateNet)
end
---- BATTERY widget
--if useBat == true then
-- baticon = widget({ type = "imagebox" })
-- --baticon.image = image(beautiful.widget_batfull)
-- --Initialize widget
-- batwidget = widget({ type = "textbox" })
-- batwidget.width = 22
-- batwidget.align = "right"
-- --Register widget
-- --vicious.register(batwidget, vicious.widgets.bat, "$1$2", 31, "BAT1")
-- vicious.register(batwidget, vicious.widgets.bat,
-- function(widget, args)
-- if string.match(args[1], "[+↯]") then
-- baticon.image = image(beautiful.widget_ac)
-- elseif tonumber(args[2]) > 40 then
-- baticon.image = image(beautiful.widget_batfull)
-- elseif tonumber(args[2]) > 20 then
-- baticon.image = image(beautiful.widget_batlow)
-- else
-- baticon.image = image(beautiful.widget_batempty)
-- end
-- if tonumber(args[2]) == 100 then
-- return "Full"
-- end
-- return args[2] .. "%"
-- end, updateBat, battery)
--end
-- {{{ CPU
--if useTemp == true then
-- -- Core Temp
-- tempwidget = widget({ type = "textbox" })
-- tempwidget.width = 26
-- tempwidget.align = "right"
-- vicious.register(tempwidget, vicious.widgets.thermal, "$1 C", updateCpu, { thermalZone, thermalData })
-- --vicious.register(tempwidget, vicious.widgets.thermal, "$1°C", 5, { "thermal_zone0", "sys" })
-- -- Icon
-- tempicon = widget({ type = "imagebox" })
-- tempicon.image = image(beautiful.widget_temp)
--end
-- Readout
if useCpu == true then
-- Icon
cpuicon = widget({ type = "imagebox" })
cpuicon.image = image(beautiful.widget_cpu)
-- Core 1 Meter
cpubar = {}
freq = {}
displayCores = {}
displayCpu = {}
for s = 1, cpuCores do
cpubar[s] = awful.widget.progressbar()
cpubar[s]:set_width(50)
cpubar[s]:set_height(6)
cpubar[s]:set_vertical(false)
cpubar[s]:set_background_color("#434343")
--cpubar:set_color(beautiful.fg_normal)
cpubar[s]:set_gradient_colors({ beautiful.fg_normal, beautiful.fg_normal, beautiful.fg_normal, beautiful.bar })
--Delete the following line if you want to put the widget on the left side of the wibox
cpubar[s].layout = awful.widget.layout.horizontal.rightleft
vicious.register(cpubar[s], vicious.widgets.cpu, "$" .. s, updateCpu)
awful.widget.layout.margins[cpubar[s].widget] = { top = 6 }
-- Frequency
freq[s] = widget({ type = "textbox" })
freq[s].width = 44
freq[s].align = "right"
--vicious.register(freq1, vicious.widgets.cpufreq, "$2 GHz", 9, "cpu0")
vicious.register(freq[s], vicious.widgets.cpufreq,
function(widget, args)
return string.format("%03.1f GHz", args[2])
end, updateCpu, "cpu" .. s - 1)
-- Cache that shit
vicious.cache(vicious.widgets.cpu)
end
end
-- }}} CPU
-- {{{ MEM
if useMem == true then
-- Icon
memicon = widget({ type = "imagebox" })
memicon.image = image(beautiful.widget_mem)
-- Percentage
--mem = widget({ type = "textbox" })
--vicious.register(mem, vicious.widgets.mem, "$1%")
-- Meter
membar = awful.widget.progressbar()
membar:set_width(50)
membar:set_height(6)
membar:set_vertical(false)
membar:set_background_color("#434343")
--membar:set_color(beautiful.fg_normal )
membar:set_gradient_colors({ beautiful.fg_normal, beautiful.fg_normal, beautiful.fg_normal, beautiful.bar })
--This bar should be placed on the right side of the wibox unless
--it's a dual-screen config in which case the default (leftright)
--layout is used... change that if you need!
if screencount ~= dualScreen then
membar.layout = awful.widget.layout.horizontal.rightleft
end
--Register the widget
vicious.register(membar, vicious.widgets.mem, "$1", updateMem)
-- Align progressbars
awful.widget.layout.margins[membar.widget] = { top = 6 }
-- MEM Usage
--mem_total = widget({ type = "textbox" })
--vicious.register(mem_total, vicious.widgets.mem, "$3 MB", 9)
--mem_used = widget({ type = "textbox" })
--vicious.register(mem_total, vicious.widgets.mem, "$2 MB", 9,)
-- Cache that shit
vicious.cache(vicious.widgets.mem)
end
-- }}} MEM
-- Create a textclock widget
mytextclock = awful.widget.textclock({ align = "right" }, "%H:%M")
awful.widget.layout.margins[mytextclock] = { top = -1 }
-- Create a systray
mysystray = widget({ type = "systray"})
-- Create a wibox for each screen and add it
mywibox = {}
mybottomwibox = {}
mypromptbox = {}
mylayoutbox = {}
mytaglist = {}
mytaglist.buttons = awful.util.table.join(awful.button({}, 1, awful.tag.viewonly),
awful.button({ modkey }, 1, awful.client.movetotag),
awful.button({}, 3, awful.tag.viewtoggle),
awful.button({ modkey }, 3, awful.client.toggletag),
awful.button({}, 4, awful.tag.viewnext),
awful.button({}, 5, awful.tag.viewprev))
mytasklist = {}
mytasklist.buttons = awful.util.table.join(awful.button({}, 1, function(c)
if not c:isvisible() then
awful.tag.viewonly(c:tags()[1])
end
client.focus = c
c:raise()
end),
awful.button({}, 3, function()
if instance then
instance:hide()
instance = nil
else
instance = awful.menu.clients({ width = 250 })
end
end),
awful.button({}, 4, function()
awful.client.focus.byidx(1)
if client.focus then client.focus:raise() end
end),
awful.button({}, 5, function()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end))
for s = 1, screencount do
-- Set a screen margin for borders
awful.screen.padding(screen[s], { top = 0 })
-- Create a promptbox for each screen
mypromptbox[s] = awful.widget.prompt()
-- Create an imagebox widget which will contains an icon indicating which layout we're using.
-- We need one layoutbox per screen.
mylayoutbox[s] = awful.widget.layoutbox(s)
mylayoutbox[s]:buttons(awful.util.table.join(awful.button({}, 1, function() awful.layout.inc(layouts, 1) end),
awful.button({}, 3, function() awful.layout.inc(layouts, -1) end),
awful.button({}, 4, function() awful.layout.inc(layouts, 1) end),
awful.button({}, 5, function() awful.layout.inc(layouts, -1) end)))
mylayoutbox[s].resize = false
-- Create a taglist widget
mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons)
awful.widget.layout.margins[mytaglist[s]] = { top = -2 }
-- WARNING: In order to properly view the tasklist some lua files have been modified. For the
-- tasklist_floating_icon icon to be placed on the left side of the task name instead of the
-- right alignment, /usr/share/awesome/lib/awful/widget/tasklist.lua in function new(label, buttons) the
-- variable widgets.textbox has to be modified like this:
-- remove bg_align = "right" and
-- modify the left margin from 2 to icon width + 2 (i.e.: 18).
-- Create a tasklist widget
mytasklist[s] = awful.widget.tasklist(function(c)
return awful.widget.tasklist.label.currenttags(c, s,
-- WARNING: Requires modified /usr/share/awesome/lib/awful/widget/tasklist.lua !!!
-- This basically hides the application icons on the tasklist. If you don't want this or
-- prefer not to change your tasklist.lua remove the following line!
{ hide_icon = true })
end, mytasklist.buttons)
awful.widget.layout.margins[mytasklist[s]] = { top = 2 }
-- WIBOXES --
-- Here we create the wiboxes if it's not a dual-screen layout
if screencount ~= dualScreen then
-- Create the wibox
mywibox[s] = awful.wibox({ position = "top", screen = s, border_width = 0, height = 18 })
-- Add widgets to the wibox - order matters
mywibox[s].widgets = {
mytaglist[s],
mypromptbox[s],
displaySysInfo,
layout = awful.widget.layout.horizontal.leftright
mytextclock,
mylayoutbox[s],
s == 1 and mysystray or nil,
mytasklist[s],
layout = awful.widget.layout.horizontal.rightleft
mybottomwibox[s] = awful.wibox({ position = "bottom", screen = s, border_width = 0, height = 18 })
mybottomwibox[s].widgets = {
space, music_play, music_pause, music_stop, music_prev, music_next, space, mpdwidget,
layout = awful.widget.layout.horizontal.leftright
spacer,
bracketr,
-- spacer, batwidget, spacer, baticon, spacer,
-- separator,
-- spacer, wifiwidget, spacer, wifiimage0, wifiimage1, wifiimage2, wifiimage3, wifiimage4, spacer,
-- separator,
-- spacer, tempwidget, spacer, tempicon, spacer,
-- separator,
spacer, freq[1], spacer, cpubar[1], spacer,
--cpuLabel[1], spacer,
cpuicon, spacer,
separator,
spacer, membar, spacer, memicon, spacer,
separator,
spacer, netupwidget, spacer, upicon, spacer, separator, spacer, netdnwidget, spacer, dnicon, spacer,
separator,
space, pghosticon, pnoghosticon, runpicon, picon, space,
bracketl,
layout = awful.widget.layout.horizontal.rightleft
end
end
if screencount == dualScreen then
-- Here we create the wiboxes if it is a dual screen configuration:
mywibox[1] = awful.wibox({ position = "top", screen = 1, border_width = 0, height = 18 })
-- Add widgets to the wibox - order matters
mywibox[1].widgets = {
mytaglist[1],
spacer,
mypromptbox[1],
mytasklist[1],
layout = awful.widget.layout.horizontal.leftright
spacer,
mytextclock,
-- spacer,
mylayoutbox[1],
-- spacer,
-- mytasklist[1],
layout = awful.widget.layout.horizontal.rightleft
mybottomwibox[1] = awful.wibox({ position = "bottom", screen = 1, border_width = 0, height = 18 })
mybottomwibox[1].widgets = {
space, music_play, music_pause, music_stop, music_prev, music_next, space, mpdwidget,
layout = awful.widget.layout.horizontal.leftright
space,
s == 1 and mysystray or nil,
layout = awful.widget.layout.horizontal.rightleft
mywibox[2] = awful.wibox({ position = "top", screen = 2, border_width = 0, height = 18 })
mywibox[2].widgets = {
space,
mytaglist[2],
spacer,
mypromptbox[2],
layout = awful.widget.layout.horizontal.leftright
spacer,
mytextclock,
space,
mylayoutbox[2],
spacer,
mytasklist[2],
layout = awful.widget.layout.horizontal.rightleft
mybottomwibox[2] = awful.wibox({ position = "bottom", screen = 2, border_width = 0, height = 18 })
mybottomwibox[2].widgets = {
spacer,
bracketl,
spacer, sys, spacer,
separator,
space, runpicon, picon, pghosticon, pnoghosticon, space,
separator,
spacer, dnicon, spacer, netdnwidget, spacer, separator, spacer, upicon, spacer, netupwidget, spacer,
separator,
spacer, memicon, spacer, membar, spacer,
bracketr,
layout = awful.widget.layout.horizontal.leftright
spacer,
bracketr,
spacer, tempwidget, spacer, tempicon, spacer,
separator,
spacer, freq[2], spacer, cpubar[2], spacer,
cpuLabel[2], spacer,
cpuicon, spacer,
separator,
spacer, freq[1], spacer, cpubar[1], spacer,
cpuLabel[1], spacer,
cpuicon, spacer,
bracketl,
layout = awful.widget.layout.horizontal.rightleft
end
-- {{{ Mouse bindings
root.buttons(awful.util.table.join(awful.button({}, 3, function() mymainmenu:toggle() end),
awful.button({}, 4, awful.tag.viewnext),
awful.button({}, 5, awful.tag.viewprev)))
-- {{{ Key bindings
globalkeys = awful.util.table.join(awful.key({ modkey, }, "Left", awful.tag.viewprev),
awful.key({ }, "Print", function () awful.util.spawn("gnome-screenshot") end),
awful.key({ modkey, }, "Right", awful.tag.viewnext),
awful.key({ modkey, }, "Escape", awful.tag.history.restore),
awful.key({ modkey, }, "j",
function()
awful.client.focus.byidx(1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "k",
function()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "w", function() mymainmenu:show({ keygrabber = true }) end),
--Volume manipulation
-- awful.key({}, "XF86AudioRaiseVolume", function() awful.util.spawn("amixer set Master 5+") end),
-- awful.key({}, "XF86AudioLowerVolume", function() awful.util.spawn("amixer set Master 5-") end),
-- Layout manipulation
awful.key({ modkey, "Shift" }, "j", function() awful.client.swap.byidx(1) end),
awful.key({ modkey, "Shift" }, "k", function() awful.client.swap.byidx(-1) end),
awful.key({ modkey, "Control" }, "j", function() awful.screen.focus_relative(1) end),
awful.key({ modkey, "Control" }, "k", function() awful.screen.focus_relative(-1) end),
awful.key({ modkey, }, "u", awful.client.urgent.jumpto),
awful.key({ modkey, }, "Tab",
function()
awful.client.focus.history.previous()
if client.focus then
client.focus:raise()
end
end),
-- Standard program
awful.key({ modkey, }, "Return", function() awful.util.spawn(terminal) end),
awful.key({ modkey, "Control" }, "r", awesome.restart),
awful.key({ modkey, "Shift" }, "q", awesome.quit),
awful.key({ modkey, }, "l", function() awful.tag.incmwfact(0.05) end),
awful.key({ modkey, }, "h", function() awful.tag.incmwfact(-0.05) end),
awful.key({ modkey, "Shift" }, "h", function() awful.tag.incnmaster(1) end),
awful.key({ modkey, "Shift" }, "l", function() awful.tag.incnmaster(-1) end),
awful.key({ modkey, "Control" }, "h", function() awful.tag.incncol(1) end),
awful.key({ modkey, "Control" }, "l", function() awful.tag.incncol(-1) end),
awful.key({ modkey, }, "space", function() awful.layout.inc(layouts, 1) end),
awful.key({ modkey, "Shift" }, "space", function() awful.layout.inc(layouts, -1) end),
-- Prompt
awful.key({ modkey }, "r", function() mypromptbox[mouse.screen]:run() end),
awful.key({ modkey }, "x",
function()
awful.prompt.run({ prompt = "Run Lua code: " },
mypromptbox[mouse.screen].widget,
awful.util.eval, nil,
awful.util.getdir("cache") .. "/history_eval")
end))
clientkeys = awful.util.table.join(awful.key({ modkey, }, "f", function(c) c.fullscreen = not c.fullscreen end),
awful.key({ modkey, }, "q", function(c) c:kill() end),
awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle),
awful.key({ modkey, "Control" }, "Return", function(c) c:swap(awful.client.getmaster()) end),
awful.key({ modkey, }, "o", awful.client.movetoscreen),
awful.key({ modkey, "Shift" }, "m", function () awful.util.spawn("urxvt -T ncmpcpp -e 'ncmpcpp'") end),
awful.key({ modkey, "Shift" }, "w", function () awful.util.spawn("chromium") end),
awful.key({ modkey, }, "b", function () awful.util.spawn("nautilus --no-desktop") end),
awful.key({ modkey, "Shift" }, "r", function(c) c:redraw() end),
awful.key({ modkey, }, "t", function(c) c.ontop = not c.ontop end),
awful.key({ modkey, }, "n", function(c) c.minimized = not c.minimized end),
awful.key({ modkey, }, "m",
function(c)
c.maximized_horizontal = not c.maximized_horizontal
c.maximized_vertical = not c.maximized_vertical
end))
-- Compute the maximum number of digit we need, limited to 9
keynumber = 0
for s = 1, screencount do
keynumber = math.min(9, math.max(#tags[s], keynumber));
end
-- Bind all key numbers to tags.
-- Be careful: we use keycodes to make it works on any keyboard layout.
-- This should map on the top row of your keyboard, usually 1 to 9.
for i = 1, keynumber do
globalkeys = awful.util.table.join(globalkeys,
awful.key({ modkey }, "#" .. i + 9,
function()
local screen = mouse.screen
if tags[screen][i] then
awful.tag.viewonly(tags[screen][i])
end
end),
awful.key({ modkey, "Control" }, "#" .. i + 9,
function()
local screen = mouse.screen
if tags[screen][i] then
awful.tag.viewtoggle(tags[screen][i])
end
end),
awful.key({ modkey, "Shift" }, "#" .. i + 9,
function()
if client.focus and tags[client.focus.screen][i] then
awful.client.movetotag(tags[client.focus.screen][i])
end
end),
awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
function()
if client.focus and tags[client.focus.screen][i] then
awful.client.toggletag(tags[client.focus.screen][i])
end
end))
end
clientbuttons = awful.util.table.join(awful.button({}, 1, function(c) client.focus = c; c:raise() end),
awful.button({ modkey }, 1, awful.mouse.client.move),
awful.button({ modkey }, 3, awful.mouse.client.resize))
-- Set keys
root.keys(globalkeys)
-- {{{ Rules
awful.rules.rules = {
-- All clients will match this rule.
rule = {},
properties = {
border_width = beautiful.border_width,
border_color = beautiful.border_normal,
size_hints_honor = false,
focus = true,
keys = clientkeys,
buttons = clientbuttons
rule = { class = "MPlayer" },
properties = { floating = true }
rule = { class = "pinentry" },
properties = { floating = true }
rule = { class = "gimp" },
properties = { floating = true }
{ rule = { class = "firefox" },
properties = { tag = tags[1][2] } },
{ rule = { class = "Chromium" },
properties = { tag = tags[1][2] } },
{ rule = { class = "Pidgin" },
properties = { tag = tags[1][3] } },
{ rule = { class = "Xchat" },
properties = {tag = tags[1][4] } },
-- Set Firefox to always map on tags number 2 of screen 1.
-- { rule = { class = "Firefox" },
-- properties = { tag = tags[1][2] } },
-- {{{ Signals
-- Signal function to execute when a new client appears.
client.add_signal("manage", function(c, startup)
-- Add a titlebar
-- awful.titlebar.add(c, { modkey = modkey })
-- Enable sloppy focus
c:add_signal("mouse::enter", function(c)
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
and awful.client.focus.filter(c) then
client.focus = c
end
end)
if not startup then
-- Set the windows at the slave,
-- i.e. put it at the end of others instead of setting it master.
-- awful.client.setslave(c)
-- Put windows in a smart way, only if they does not set an initial position.
if not c.size_hints.user_position and not c.size_hints.program_position then
awful.placement.no_overlap(c)
awful.placement.no_offscreen(c)
end
end
end)
client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end)
client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
-- {{{ Tag signal handler - selection
-- - ASCII tags 1 [2] 3 4...
-- - start with tag 1 named [1] in tag setup
for s = 1, screencount do
for t = 1, #tags[s] do
tags[s][t]:add_signal("property::selected", function ()
if tags[s][t].selected then
tags[s][t].name = "[" .. tags[s][t].name .. "]"
else--]]
--tags[s][t].name = tags[s][t].name:gsub("[%[%]]", "")
--[[ end
end)
end
end
I have tried to search around for a solution to this, but I am coming up short. Any idea on how to solve this?
Last edited by kveras (2011-11-21 09:01:47)First of all, did you check the wiki and forums? We'll help you, but you have to try to fix it yourself first.
You will need to provide more info if you want help.
Did you set up Gnome to force fallback mode?
Did you look at the Gnome wiki article? There's a few sections that sound like what your looking to do, but the examples are USING OTHER WM's. They still might be able to point you in the right direction. -
MDI JTable Overlap Area Repaint Problem
Hi all,
I have a problem for my application in MDI mode.
I open many windows (JInternalFrame contain JTable) under JDesktopPane. Some of the windows are overlapping and when they receive update in the table, it seems repaint all of the overlapping windows, not only itself. This make my application performance become poor, slow respond for drap & drop an existing window or open a new window.
To prove this, i make a simple example for open many simple table and have a thread to update the table's value for every 200 mill second. After i open about 20 windows, the performance become poor again.
If anyone face the same problem with me and any suggestions to solve the problem ?
Please help !!!!!
Following are my sources:
public class TestMDI extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel contentPanel;
private JDesktopPane desktopPane;
private JMenuBar menuBar;
private List<TestPanel> allScreens = new ArrayList<TestPanel>();
private List<JDialog> freeFloatDialogs = new ArrayList<JDialog>();
private List<JInternalFrame> mdiInternalFrm = new ArrayList<JInternalFrame>();
int x = 0;
int y = 0;
int index = 0;
private static int MDI_MODE = 0;
private static int FREE_FLOAT_MODE = 1;
private int windowMode = MDI_MODE;
public TestMDI() {
init();
public static void main(String[] args) {
new TestMDI().show();
public void init() {
contentPanel = new JPanel();
desktopPane = new JDesktopPane();
desktopPane.setDragMode(JDesktopPane.LIVE_DRAG_MODE);
desktopPane.setFocusTraversalKeysEnabled(false);
desktopPane.setFocusTraversalPolicyProvider(false);
desktopPane.setBorder(null);
desktopPane.setIgnoreRepaint(true);
desktopPane.setPreferredSize(new Dimension(1000, 800));
this.setSize(new Dimension(1000, 800));
menuBar = new JMenuBar();
JMenu menu1 = new JMenu("Test");
JMenuItem menuItem1 = new JMenuItem("Open Lable Screen");
menuItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (int i = 1; i < 4; i++) {
final TestJLableScreen screen = new TestJLableScreen("Screen " + (allScreens.size() + 1));
screen.startTime();
if (windowMode == MDI_MODE) {
JInternalFrame frame = createInternalFram(screen);
desktopPane.add(frame);
mdiInternalFrm.add(frame);
if (allScreens.size() * 60 + 100 < 1000) {
x = allScreens.size() * 60;
y = 60;
} else {
x = 60 * index;
y = 120;
index++;
frame.setLocation(x, y);
frame.setVisible(true);
} else {
JDialog dialog = createJDialog(screen);
freeFloatDialogs.add(dialog);
if (i * 60 + 100 < 1000) {
x = i * 60;
y = 60;
} else {
x = 60 * index;
y = 120;
index++;
dialog.setLocation(x, y);
dialog.setVisible(true);
allScreens.add(screen);
JMenuItem menuItem2 = new JMenuItem("Open Table Screen");
menuItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (int i = 1; i < 4; i++) {
TestTableScreen screen = new TestTableScreen("Screen " + (allScreens.size() + 1));
screen.startTime();
if (windowMode == MDI_MODE) {
JInternalFrame frame = createInternalFram(screen);
desktopPane.add(frame);
mdiInternalFrm.add(frame);
if (allScreens.size() * 60 + 100 < 1000) {
x = allScreens.size() * 60;
y = 60;
} else {
x = 60 * index;
y = 120;
index++;
frame.setLocation(x, y);
frame.setVisible(true);
} else {
JDialog dialog = createJDialog(screen);
freeFloatDialogs.add(dialog);
if (i * 60 + 100 < 1000) {
x = i * 60;
y = 60;
} else {
x = 60 * index;
y = 120;
index++;
dialog.setLocation(x, y);
dialog.setVisible(true);
allScreens.add(screen);
menu1.add(menuItem1);
menu1.add(menuItem2);
this.setJMenuBar(menuBar);
this.getJMenuBar().add(menu1);
this.getJMenuBar().add(createSwitchMenu());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(desktopPane);
desktopPane.setDesktopManager(null);
public JInternalFrame createInternalFram(final TestPanel panel) {
final CustomeInternalFrame internalFrame = new CustomeInternalFrame(panel.getTitle(), true, true, true, true) {
public void doDefaultCloseAction() {
super.doDefaultCloseAction();
allScreens.remove(panel);
internalFrame.setPanel(panel);
// internalFrame.setOpaque(false);
internalFrame.setSize(new Dimension(1010, 445));
internalFrame.add(panel);
internalFrame.setFocusTraversalKeysEnabled(false);
internalFrame.setFocusTraversalPolicyProvider(false);
desktopPane.getDesktopManager();
// internalFrame.setFocusTraversalKeysEnabled(false);
internalFrame.setIgnoreRepaint(true);
return internalFrame;
public JDialog createJDialog(final TestPanel panel) {
JDialog dialog = new JDialog(this, panel.getTitle());
dialog.setSize(new Dimension(1010, 445));
dialog.add(panel);
dialog.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
allScreens.remove(panel);
return dialog;
public JMenu createSwitchMenu() {
JMenu menu = new JMenu("Test2");
JMenuItem menuItem1 = new JMenuItem("Switch FreeFloat");
menuItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
windowMode = FREE_FLOAT_MODE;
for (JInternalFrame frm : mdiInternalFrm) {
frm.setVisible(false);
frm.dispose();
frm = null;
mdiInternalFrm.clear();
remove(desktopPane);
desktopPane.removeAll();
// revalidate();
repaint();
add(contentPanel);
index = 0;
for (JDialog dialog : freeFloatDialogs) {
dialog.setVisible(false);
dialog.dispose();
dialog = null;
freeFloatDialogs.clear();
for (int i = 0; i < allScreens.size(); i++) {
JDialog dialog = createJDialog(allScreens.get(i));
freeFloatDialogs.add(dialog);
if (i * 60 + 100 < 1000) {
x = i * 60;
y = 60;
} else {
x = 60 * index;
y = 120;
index++;
dialog.setLocation(x, y);
dialog.setVisible(true);
JMenuItem menuItem2 = new JMenuItem("Switch MDI");
menuItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
windowMode = MDI_MODE;
remove(contentPanel);
add(desktopPane);
for (int i = 0; i < freeFloatDialogs.size(); i++) {
freeFloatDialogs.get(i).setVisible(false);
freeFloatDialogs.get(i).dispose();
freeFloatDialogs.clear();
// revalidate();
repaint();
for (JInternalFrame frm : mdiInternalFrm) {
frm.setVisible(false);
frm.dispose();
frm = null;
mdiInternalFrm.clear();
index = 0;
for (int i = 0; i < allScreens.size(); i++) {
JInternalFrame frame = createInternalFram(allScreens.get(i));
desktopPane.add(frame);
mdiInternalFrm.add(frame);
if (i * 60 + 100 < 1000) {
x = i * 60;
y = 60;
} else {
x = 60 * index;
y = 120;
index++;
frame.setLocation(x, y);
frame.setVisible(true);
menu.add(menuItem1);
menu.add(menuItem2);
return menu;
public class TestTableScreen extends TestPanel {
private static final long serialVersionUID = 1L;
JTable testTable = new JTable();
MyTableModel tableModel1 = new MyTableModel(1);
private boolean notRepaint = false;
int start = 0;
JScrollPane scrollPane = new JScrollPane();
private Timer timmer = new Timer(200, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Random indexRandom = new Random();
final int index = indexRandom.nextInt(50);
Random valRandom = new Random();
final int val = valRandom.nextInt(600);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
notRepaint = false;
TestTableScreen.this.update(index + "|" + val);
public TestTableScreen(String title) {
this.title = title;
init();
tableModel1.setTabelName(title);
public void startTime() {
timmer.start();
public String getTitle() {
return title;
public void update(String updateStr) {
String[] val = updateStr.split("\\|");
if (val.length == 2) {
int index = Integer.valueOf(val[0]);
List vals = tableModel1.getVector();
if (vals.size() > index) {
vals.set(index, val[1]);
// tableModel1.fireTableRowsUpdated(index, index);
} else {
vals.add(val[1]);
// tableModel1.fireTableRowsUpdated(vals.size() - 1, vals.size() - 1);
tableModel1.fireTableDataChanged();
public TableModel getTableModel() {
return tableModel1;
public void init() {
testTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
testTable.setRowSelectionAllowed(true);
this.testTable.setModel(tableModel1);
int[] width = { 160, 80, 45, 98, 60, 88, 87, 88, 80, 70, 88, 80, 75, 87, 87, 41, 88, 82, 75, 68, 69 };
TableColumnModel columnModel = testTable.getColumnModel();
for (int i = 0; i < width.length; i++) {
columnModel.getColumn(i).setPreferredWidth(width[i]);
testTable.setRowHeight(20);
tableModel1.fireTableDataChanged();
this.setLayout(new BorderLayout());
TableColumnModel columnMode2 = testTable.getColumnModel();
int[] width2 = { 200 };
for (int i = 0; i < width2.length; i++) {
columnMode2.getColumn(i).setPreferredWidth(width2[i]);
scrollPane.getViewport().add(testTable);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.add(scrollPane, BorderLayout.CENTER);
class MyTableModel extends DefaultTableModel {
public List list = new ArrayList();
String titles[] = new String[] { "袨怓1", "袨怓2", "袨怓3", "袨怓4", "袨怓5", "袨怓6", "袨怓7", "袨怓8", "袨怓9", "袨怓10", "袨怓11",
"袨怓12", "袨怓13", "袨怓14", "袨怓15", "袨怓16", "袨怓17", "袨怓18", "袨怓19", "袨怓20", "袨怓21" };
String tabelName = "";
int type_head = 0;
int type_data = 1;
int type = 1;
public MyTableModel(int type) {
super();
this.type = type;
for (int i = 0; i < 50; i++) {
list.add(i);
public void setTabelName(String name) {
this.tabelName = name;
public int getRowCount() {
if (list != null) {
return list.size();
return 0;
public List getVector() {
return list;
public int getColumnCount() {
if (type == 0) {
return 1;
} else {
return titles.length;
public String getColumnName(int c) {
if (type == 0) {
return "head";
} else {
return titles[c];
public boolean isCellEditable(int nRow, int nCol) {
return false;
public Object getValueAt(int r, int c) {
if (list.size() == 0) {
return null;
switch (c) {
default:
if (type == 0) {
return r + " " + c + " test ";
} else {
return list.get(r) + " " + c;
public boolean isNotRepaint() {
return notRepaint;
public void setNotRepaint(boolean notRepaint) {
this.notRepaint = notRepaint;
public class TestPanel extends JPanel {
protected String title = "";
protected boolean needRepaint = false;
protected boolean isFirstOpen = true;
public String getTitle() {
return title;
public void setNeedRepaint(boolean flag) {
this.needRepaint = flag;
public boolean isNeedRepaint() {
return needRepaint;
public boolean isFirstOpen() {
return isFirstOpen;
public void setFirstOpen(boolean isFirstOpen) {
this.isFirstOpen = isFirstOpen;
public class TestJLableScreen extends TestPanel {
private static final long serialVersionUID = 1L;
private JLabel[] allLables = new JLabel[20];
private Timer timmer = new Timer(20, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Random indexRandom = new Random();
final int index = indexRandom.nextInt(10);
Random valRandom = new Random();
final int val = valRandom.nextInt(600);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
TestJLableScreen.this.setNeedRepaint(true);
TestJLableScreen.this.update(index + "|" + val);
public TestJLableScreen(String title) {
this.title = title;
init();
public void startTime() {
timmer.start();
public String getTitle() {
return title;
public void update(String updateStr) {
String[] val = updateStr.split("\\|");
if (val.length == 2) {
int index = Integer.valueOf(val[0]);
allLables[index * 2 + 1].setText(val[1]);
public void init() {
this.setLayout(new GridLayout(10, 2));
boolean flag = true;
for (int i = 0; i < allLables.length; i++) {
allLables[i] = new JLabel() {
// public void setText(String text) {
// super.setText(text);
// // System.out.println(" setText " + getTitle() + " ; " + this.getName());
public void paint(Graphics g) {
super.paint(g);
// System.out.println(" paint " + getTitle() + " ; " + this.getName());
// public void repaint() {
// super.repaint();
// System.out.println(" repaint " + getTitle() + " ; " + this.getName());
allLables[i].setName("" + i);
if (i % 2 == 0) {
allLables[i].setText("Name " + i + " : ");
} else {
allLables[i].setOpaque(true);
if (flag) {
allLables[i].setBackground(Color.YELLOW);
flag = false;
} else {
allLables[i].setBackground(Color.CYAN);
flag = true;
allLables[i].setText(i * 8 + "");
for (int i = 0; i < allLables.length; i++) {
this.add(allLables[i]);
public class CustomeInternalFrame extends JInternalFrame {
protected TestPanel panel;
public CustomeInternalFrame() {
this("", false, false, false, false);
public CustomeInternalFrame(String title) {
this(title, false, false, false, false);
public CustomeInternalFrame(String title, boolean resizable) {
this(title, resizable, false, false, false);
public CustomeInternalFrame(String title, boolean resizable, boolean closable) {
this(title, resizable, closable, false, false);
public CustomeInternalFrame(String title, boolean resizable, boolean closable, boolean maximizable) {
this(title, resizable, closable, maximizable, false);
public CustomeInternalFrame(String title, boolean resizable, boolean closable, boolean maximizable,
boolean iconifiable) {
super(title, resizable, closable, maximizable, iconifiable);
public TestPanel getPanel() {
return panel;
public void setPanel(TestPanel panel) {
this.panel = panel;i had the same problem with buttons and it seemed that i overlayed my button with something else...
so check that out first do you put something on that excact place???
other problem i had was the VAJ one --> VisualAge for Java (terrible program)
it does strange tricks even when you don't use the drawing tool...
dunno 2 thoughts i had... check it out...
SeJo -
Unity Connection 7 with overlapping extension
Hello everybody,
I'm deploying a CUCM 7.1.3 + Unity Connecion 7.1.3 to a customer, and I have a doubt when using overlapping extension. As it's a large environment, he has overlapping extension number in his multiple sites. For example, both SiteA and SiteB have the extension range 8XXX. In CUCM I have configured some translations patterns, so that an user from SiteA should dial 118XXX in order to reach SiteB, and an user in SiteB should dial 218XXX in order to reach site A. And each site has its own line partition to extension numbers. And everything works fine...
But these users are all in the same Unity Connection Server. So I would have users from SiteA and SiteB with the same extension in Unity Connection, and I can't do that. What I know can do is to configure some partitions from SiteA and SiteB in CUC, and put each subscriber in one partition, right?
But when a user wants to reach the voice mail to get his messages, how Unity Connection knows from which location is he?
Please, anyone could advise me how can I proceed with this configuration?
Thank you!!!Hello,
I workarounded my problem creating multiple VM Profiles, and assigning a diferent Voice Mail Box Mask for each. And in Unity connection I created a alternate extension for each user.
For example... the extension 6000 from SiteA has the VM Profile VM_SiteA, which has the voicemail box mask 11XXXX. And this user in Connection has the alternate extension 116000. And the extension 6000 from SiteB has the VM Profile VM_SiteB, which has the voicemail box mask 21XXXX, and this user has this number as alternate extension as well (216000)... It works fine like this.
But actually I haven't tested the MWI... If I have a translation pattern in CUCM that translates 11XXXX to XXXX (in partition from SiteA), and another 21XXXX to XXXX (in partition from SiteB), and configure the MWI extension in Connection to be 11XXXX and 21XXXX, will it work? Have anyone already tested this?
Thank you very much!!!
Bruno
Maybe you are looking for
-
Help. My HP G50 will start but the Windows Vista will not upload. I've pressed the F 10 and F 11 buttons. Memory is good. I've backed up my files using the F 11 back up function. I've tried to go back to an earlier date using system restore, no resul
-
How to restore a Web Gallery from my backu
I noticed today that one of my Web Galleries was gone. I'm sure I didn't delete it. I entered into Time Machine while still in iPhoto '08 and stepped back in time until the missing Web Gallery showed up. Apparently it got "deleted" a few days ago but
-
Does imovie support .m2ts?
Will iMovie import .m2ts video and can I edit it? If I can't, will quicktime pro be able to convert it to .mov or another file type?
-
since the update to ios8 when I tap on a song in the music player using iTunes match the track plays and is cached to the iPad but there is no longer a way to clear this cache as there was in ios7 (go to settings, usage, and delete all music) the onl
-
PLEASE tell me there is a way to apply automatic strokes using the Pen Tool.
To apply pencil and brush strokes using the Pen Tool (in Photoshop CC - the version I'm using), I would constantly have to right-click on my path, and on the dialog menu that pops up, select "Stroke Path...," then select which "Tool" (I namely use th