我是摇摆新手,
我正在创建一个包含TopPanel和底部面板的窗口
在 TopPanel:中,我添加了4个组合,3个文本字段,一个按钮和一个Label(此标签用于选择颜色)。
在 BottomPanel: JTable中,上面的TopPanel元素各有一列。
问题1:当我点击jlabel并选择一种颜色(例如红色)时,我将其设置为topPanel jlabel的背景,它工作正常,并点击顶部面板的添加按钮,它成功添加到jtable和color列也很好(即红色)。
但是,当我从toppanel jlabel中选择一种颜色(例如;绿色)时,它的背景变化很好但是当我点击toppanel的任何组合框时,底部面板jtable的颜色列会改变
当我点击“添加”按钮时也会发生同样的事情
问题2:当我更改toppanel的一个jcombo时,调用所有其他jcombo框的操作performe事件
这是我的代码
public class MultiCompareWindow extends MultiCompareWindowElements implements
ActionListener {
public static JFrame jf = new JFrame();
public static void main(String args[]) {
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
MultiCompareWindow mp = new MultiCompareWindow();
mp.getJTablePanel();
jf.add(mp.getMainPanel());
Vector<String[]> data = new Vector<String[]>();
String[] str = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
data.add(str);
mp.setDefinedSizeToElements();
jf.setVisible(true);
}
public JPanel getMainPanel() {
try {
JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.setBackground(NSColor.leftPanelcolor());
JPanel centerPanel = new JPanel(new BorderLayout());
String title = "Compare Setting";
centerPanel.setBorder(BorderFactory.createTitledBorder(title));
centerPanel.setBackground(NSColor.leftPanelcolor());
centerPanel.add(getTopPanel(), BorderLayout.NORTH);
centerPanel.add(getJTablePanel(), BorderLayout.CENTER);
mainPanel.add(centerPanel, BorderLayout.NORTH);
// These line will set the border of around the panel
Border border = mainPanel.getBorder();
Border margin = new EmptyBorder(5, 10, 0, 10);
mainPanel.setBorder(new CompoundBorder(border, margin));
return mainPanel;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public JPanel getJTablePanel() {
try {
JPanel jpanel = new JPanel(new BorderLayout());
jpanel.setBackground(NSColor.leftPanelcolor());
jtable = new JTable(new CustomTableModel(columnNames));
// This will set CellRender to entire table
jtable.setDefaultRenderer(Object.class, new ImageCellRender());
JScrollPane jscrollPane = new JScrollPane(jtable);
Dimension d = new Dimension(250, 200);
jtable.setPreferredScrollableViewportSize(d);
jtable.setRowHeight(23); // Which increase the row height
setActionListeners();
// This will set table background color Pydi
jscrollPane.getViewport().setBackground(NSColor.leftPanelcolor());
JTableHeader jtabHeader = jtable.getTableHeader();
jtabHeader.setReorderingAllowed(false);
jtabHeader.setBackground(new Color(208, 231, 245));
jtabHeader.setPreferredSize(new Dimension(25, 25));
Border border = jpanel.getBorder();
Border margin = new EmptyBorder(0, 0, 10, 0);
jpanel.setBorder(new CompoundBorder(border, margin));
jpanel.add(jscrollPane);
return jpanel;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
class CustomTableModel extends AbstractTableModel {
private String[] columnNames = null;
public Vector<String[]> data = null;
public CustomTableModel(String[] columnNames) {
this.columnNames = columnNames;
data = new Vector<String[]>();
}
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return columnNames.length;
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public String getColumnName(int columnIndex) {
return columnNames[columnIndex];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
if (columnIndex == 9)
return jlblImge;
if (columnIndex == 8) {
JLabel jlblTmpColor = new JLabel();
jlblTmpColor.setOpaque(true);
jlblTmpColor.setBackground(jlblPaintColor.getBackground());
return jlblTmpColor;
}
return data.get(rowIndex)[columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
public void setValueAt(Object value, int rowIndex, int columnIndex) {
if (columnIndex == 8 || columnIndex == 9)
return;
data.get(rowIndex)[columnIndex] = value.toString();
fireTableCellUpdated(rowIndex, columnIndex);
}
public void removeRow(int row) {
data.remove(row);
fireTableRowsDeleted(row, row);
}
}
/**
* This function set the Add button
*
* @return
*/
private JButton getAddButton() {
jbuttonAdd = new JButton();
Border edge = BorderFactory.createRaisedBevelBorder();
Dimension size = new Dimension(65, 20);
jbuttonAdd.setText("Add");
jbuttonAdd.setToolTipText("Add line to tabel.");
jbuttonAdd.setBorder(edge);
jbuttonAdd.setFont(NSColor.mediumPlainFont());
jbuttonAdd.setBackground(NSColor.buttonBgColor());
jbuttonAdd.setForeground(NSColor.buttonFgColor());
// This is causing the screen becaming blank for some time
jbuttonAdd.setPreferredSize(size);
jbuttonAdd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
StringBuffer msgBuffer = new StringBuffer();
System.out.println("652 ----------------- "
+ e.getActionCommand());
String[] data = new String[10];
data[0] = jtxtMeasureMentName.getText() == null ? "Hello"
: jtxtMeasureMentName.getText();
data[1] = "A";// jcomboTestRun.getSelectedItem().toString();
data[2] = "B";// jcomboTestPhase.getSelectedItem().toString();
data[3] = "Elasped";// jcomboTimeFormat.getSelectedItem().toString();
data[4] = "00:00:00";// jtxtStartDate.getText();
data[5] = "00:10:22";// jspinnerStartTime.getValue().toString();
data[6] = "12/01/12";// jtxtEndDate.getText();
data[7] = "This";// jspinnerEndTime.getValue().toString();
data[8] = "";
data[9] = "";
Vector<String[]> vector = new Vector<String[]>();
vector.add(data);
addDataInTable(vector);
}
});
return jbuttonAdd;
}
class ImageCellRender extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
// TODO Auto-generated method stub
Component com = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (row % 2 == 0)
com.setBackground(NSColor.leftPanelcolor());
else
com.setBackground(Color.WHITE);
ImageIcon icon = new ImageIcon(
"C:\\Users\\Pydi\\Desktop\\delete.png");
if (value != null && (column == 8 || column == 9)) {
if (column == 8) {
System.out.println("1021 ----- getTableCell");
JLabel jlblTmpColor = new JLabel();
jlblTmpColor.setOpaque(true);
jlblTmpColor.setBackground(jlblPaintColor.getBackground());
return jlblTmpColor;
}
jlblImge.setHorizontalAlignment(JLabel.CENTER);
// value is parameter which filled by byteOfImage
jlblImge.setOpaque(true);
jlblImge.setIcon(icon);
if (row % 2 == 0)
jlblImge.setBackground(NSColor.leftPanelcolor());
else
jlblImge.setBackground(Color.WHITE);
jlblImge.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
return jlblImge;
}
return com;
}
}
private void setActionListeners() {
try {
jtable.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println(e.getClickCount());
JTable jtab = (JTable) e.getSource();
int row = jtab.getSelectedRow();
int col = jtab.getSelectedColumn();
if (col == 8) {
System.out.println("686------");
((CustomTableModel) jtable.getModel()).removeRow(row);
}
System.out.println("row = " + row + " col = " + col);
}
});
jtable.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
try {
int colIndex = jtable.columnAtPoint(e.getPoint());
if (colIndex == 8 || colIndex == 9)
jtable.setCursor(new Cursor(Cursor.HAND_CURSOR));
else
jtable.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
});
jlblPaintColor.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
createColorChooser();
}
});
jcomboScenarioNames.addActionListener(this);
jcomboTestRun.addActionListener(this);
jcomboTestPhase.addActionListener(this);
jcomboTimeFormat.addActionListener(this);
jcomboResolution.addActionListener(this);
} catch (Exception e) {
e.printStackTrace();
}
}
private void addDataInTable(Vector<String[]> data) {
try {
((CustomTableModel) jtable.getModel()).data.add(data.get(0));
jtable.revalidate();
jtable.repaint();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JComboBox jcombo = (JComboBox) e.getSource();
System.out.println(jcombo.getName() + "*******************875");
}
}
Plz解决了这个问题并解释了为什么
提前致谢