按钮,JTextFields和JComboBox是不可点击的

时间:2012-11-19 15:41:28

标签: java swing jbutton jtextfield

该程序包含一个标签式视图,其中前两个中有JTextFieldJButton个,JTable个中有JButton个,{3} JComboBox。按钮在前两个选项卡中正常工作,但在第三个选项卡上无法点击。我尝试将按钮更改为JTextFieldsetEnabled()之类的其他内容,但这些内容也不可编辑且无法点击。将setEditable()ContentIWantToRepaint.this.paintImmediately(ContentIWantToRepaint.this.getVisibleRect()); 函数设置为true似乎不起作用。我不知道发生了什么。

我唯一与普通法做的不同就是这段代码在我点击表格中的单元格时强行重新绘制标签。但即使没有被召唤,我仍然不能

JPanel

有关布局的其他一些信息: 标签的内容保存在GridBagLayout JTextField

  • JTextField
  • 表标题
  • 表格内容
  • import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Vector; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.ScrollPaneConstants; import javax.swing.table.DefaultTableModel; public class checkOutPanel extends JPanel { private JTable userTable; private JTable bookTable; private JScrollPane scrollUserTable, scrollBookTable; private JLabel userLabel, bookLabel; private DefaultTableModel userTableModel = new DefaultTableModel(){ public boolean isCellEditable(int row, int column){return false;} }; private DefaultTableModel bookTableModel = new DefaultTableModel(){ public boolean isCellEditable(int row, int column){return false;} }; private int selectedUser, selectedBook; private JComboBox date_month, date_day, date_year; public checkOutPanel(){ JPanel mainGrid = new JPanel();//panel that will hold all stuff in tab JPanel buttonPanel = new JPanel();//panel for holding buttons mainGrid.setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.gridx=0; c.gridy=0; //first row first column c.anchor = GridBagConstraints.WEST;//align left c.fill = GridBagConstraints.HORIZONTAL; //1 row, 2 columns, 15 horizontal padding, 0 vertical padding //buttonPanel.setLayout(new GridLayout(1,2,15,0)); //labels to describe what the user has to do userLabel = new JLabel("User :"); bookLabel = new JLabel("Book :"); JLabel dateLabel = new JLabel("Date :"); JPanel datePanel = new JPanel(); bookTable = new JTable(bookTableModel); bookTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); userTable = new JTable(userTableModel); userTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); Dimension d = new Dimension(500, 120); scrollBookTable = new JScrollPane(bookTable); scrollBookTable.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); scrollBookTable.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scrollBookTable.setMaximumSize(d); scrollBookTable.setMinimumSize(d); scrollBookTable.setPreferredSize(d); scrollUserTable = new JScrollPane(userTable); scrollUserTable.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); scrollUserTable.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scrollUserTable.setMaximumSize(d); scrollUserTable.setMinimumSize(d); scrollUserTable.setPreferredSize(d); updateTables(); //String[] month = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; //Vector<Integer> days = new Vector<Integer>(); //for (int i=1 ; i<=31 ; i++) { days.add(i); } //Vector<Integer> years = new Vector<Integer>(); //for (int i=2012 ; i>=1900 ; i--) { years.add(i); } //date_month = new JComboBox(days); JButton testButton = new JButton("WORK!!!!!!!"); //date_day = new JTextField(6); //date_year = new JTextField(6); //datePanel.add(dateLabel); //datePanel.add(date_month); //datePanel.add(date_day); //datePanel.add(date_year); mainGrid.add(userLabel, c); c.gridy++; mainGrid.add(userTable.getTableHeader(), c); c.gridy++; mainGrid.add(scrollUserTable, c); c.gridy++; c.insets = new Insets(15, 0, 0, 0);//put some padding between users and books mainGrid.add(bookLabel, c); c.gridy++; c.insets= new Insets(0,0,0,0);//back to no padding mainGrid.add(bookTable.getTableHeader(), c); c.gridy++; mainGrid.add(scrollBookTable, c); c.gridy++; c.insets = new Insets(15, 0, 0, 0);//put some padding between books and date mainGrid.add(testButton, c); c.gridy++; this.add(mainGrid);//add contents to tab userTable.addMouseListener(new mouseListener()); bookTable.addMouseListener(new mouseListener()); } public class mouseListener implements MouseListener{ @Override public void mouseClicked(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) {} @Override public void mouseExited(MouseEvent e) {} @Override public void mousePressed(MouseEvent e) {} @Override public void mouseReleased(MouseEvent e) { if(e.getSource()==userTable){ selectedUser=userTable.getSelectedRow(); userLabel.setText("User : "+ (selectedUser!=-1 ? selectedUser : "")); //don't know why i should need to use this, but it makes it work checkOutPanel.this.paintImmediately(checkOutPanel.this.getVisibleRect()); }else if(e.getSource()==bookTable){ selectedBook = bookTable.getSelectedRow(); System.out.println("Date Month : "+date_month.getSelectedItem().toString()); bookLabel.setText("Book : "+ (selectedBook!=-1 ? selectedBook : "")); //don't know why i should need to use this, but it makes it work checkOutPanel.this.paintImmediately(checkOutPanel.this.getVisibleRect()); } } } private void updateTables(){ bookTableModel.setDataVector(fillBookData(SystemStart.getDbName()), fillBookColNames()); userTableModel.setDataVector(fillUserData(SystemStart.getDbName()), fillUserColNames()); } private Vector<String> fillUserColNames(){ Vector<String> colNames = new Vector<String>(); colNames.add("ID"); colNames.add("First"); colNames.add("Last"); colNames.add("Phone"); colNames.add("Email"); colNames.add("Address"); colNames.add("City"); colNames.add("State"); colNames.add("Zip"); return colNames; } private Vector<String> fillBookColNames(){ Vector<String> colNames = new Vector<String>(); colNames.add("Title"); colNames.add("Format"); colNames.add("Author"); colNames.add("ISBN"); colNames.add("Year Pub."); colNames.add("Publisher"); colNames.add("Call #"); colNames.add("Copy #"); return colNames; } private Vector<Vector<String>> fillUserData(String dbName){ Vector<Vector<String>> v = new Vector<Vector<String>>(); Vector<String> u; for (int i=0; i<10; i++){ u = new Vector<String>(9); u.add(""+i); u.add("First"); u.add("Last"); u.add("Phone"); u.add("Email"); u.add("Address"); u.add("City"); u.add("State"); u.add("Zip"); v.add(u); } return v; } private Vector<Vector<String>> fillBookData(String dbName) { Vector<Vector<String>> v = new Vector<Vector<String>>(); Vector<String> b; for (int i=0; i<10; i++){//only include books that arent check out b = new Vector<String>(8); b.add("Title "+i); b.add("Format"); b.add("Author"); b.add("ISBN"); b.add("Year Pub."); b.add("Publisher"); b.add("Call #"); b.add("Copy #"); v.add(b); } return v; } }
  • 表标题
  • 表格内容
  • 按钮

有什么建议吗?

checkOutPanel.java

import javax.swing.JFrame;

public class SystemStart{
    private static String dbName = "dbnamehere.db";

    public static void main(String[] args) {

        //new TabbedFrame("Libary System");
        JFrame jf = new JFrame("WORK!");
        jf.add(new checkOutPanel());
        jf.pack();
        jf.setVisible(true);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static String getDbName(){return dbName;}

}

使用此文件查看它不起作用:

{{1}}

1 个答案:

答案 0 :(得分:1)

您正在向面板添加标签,然后是表格的标题,然后是包含表格的滚动窗格(...和表格标题)。删除您要添加到mainGrid表格标题的两行(您应该只添加滚动窗格):

    mainGrid.add(userTable.getTableHeader(), c);    c.gridy++;
    mainGrid.add(bookTable.getTableHeader(), c);    c.gridy++;

您的按钮现在可以使用。