所以我一直试图让JScrollPane
在我的页面上工作,但它不会!我有一个超出界限的表,我试图设置它,所以我可以向下滚动查看所有内容。
我尝试将JScrollPane
添加到所有containers
和panels
,但它不会让步:+ | - 我不知道为什么它不会工作,如果我将它分配给mainCon (this.getContentPane())
,因为如果它确实工作那么它只会使整个窗口可滚动!
正如您所看到的那样,我还没有完成任何花哨的布局或其他任何东西我只是想让功能正常工作!但是我需要让JScrollPane工作才能尝试我所有的GUIS样式!
这是我的代码:
public class searchAll extends JFrame implements ActionListener {
private MemTableModel memberTableModel;
private int selectedRow;
//JOptionPane
//Confirm Dialog
private int dialogButton = JOptionPane.YES_NO_OPTION;
//GUI RELATED
private JTable table = new JTable();
//JButtons
private JButton btnDelete = new JButton("Delete");
private JButton btnEdit = new JButton("Edit");
private JButton saveMember = new JButton("Save member");
private JButton btnBack = new JButton("Back");
//Containers, panels
Container mainCon = this.getContentPane();
JPanel formPanel = new JPanel();
//Adding scroll pane here - to formPanel which holds everything.
JScrollPane scrollPane = new JScrollPane(formPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
/*TEXT FIELDS BOXES *******************************/
private JLabel lblName = new JLabel("Name: ");
private JTextField txtName = new JTextField("", 15);
private JLabel lblEmail = new JLabel("Email: ");
private JTextField txtEmail = new JTextField("", 15);
private JLabel lblDescription = new JLabel("Description about you: ");
private JTextArea txtDescription = new JTextArea("", 5, 15);
/*TEXT FIELDS BOXES *******************************/
/*COMBO BOXES *******************************/
private JLabel lblCountry = new JLabel();
private JComboBox comCountry = new JComboBox();
private JLabel lblGenre = new JLabel();
private JComboBox comGenre = new JComboBox();
/*COMBO BOXES *******************************/
/*RADIO BUTTONS *******************************/
private JLabel lblMaleFemale = new JLabel("Gender: ");
private JRadioButton radMale = new JRadioButton("Male: ");
private JRadioButton radFemale = new JRadioButton("Female: ");
private ButtonGroup buttonGroupMF = new ButtonGroup();
private JLabel lblFreePaid = new JLabel("Membership Type: ");
private JRadioButton radFree = new JRadioButton("Free: ");
private JRadioButton radPaid = new JRadioButton("Paid: ");
private ButtonGroup buttonGroupFP = new ButtonGroup();
/*RADIO BUTTONS *******************************/
/*PAID MEMBER STUFF *******************************/
private JLabel lblCardNo = new JLabel("Card Number: ");
private JTextField txtCardNo = new JTextField("", 15);
private JLabel lblExpiry = new JLabel();
private JComboBox comExpiry = new JComboBox();
/*PAID MEMBER STUFF *******************************/
//DB SQL Variables -
private String edName = "";
private String edEmail = "";
private String edDescription = "";
private String edCountry = "";
private String edGenre = "";
private String edGender = "";
private String edMembType = "";
private String edCardNo = "";
private Object edExpiry = "";
private String edSongLim = "";
//DB
private Connection conDB = null;
private Statement stmt = null;
private ResultSet r = null;
//Validation isValid
private boolean isValid;
public searchAll(){
super("Search/Edit/Delete");
this.setBounds(400, 500, 854,400);
// this.setPreferredSize(new Dimension(500,500));
this.setVisible(true);
memberTableModel = new MemTableModel();
//Add table and GUI components
mainCon.add(BorderLayout.NORTH, btnBack);
btnBack.addActionListener(this);
mainCon.add(scrollPane);
mainCon.add(formPanel);
formPanel.setPreferredSize(new Dimension(500,500));
formPanel.add(table);
formPanel.add(btnDelete);
formPanel.add(btnEdit);
//Tried doing this - But didn't work. Just stayed static
// formPanel.add(scrollPane);
//Add action listeners
btnEdit.addActionListener(this);
btnDelete.addActionListener(this);
table.setModel(memberTableModel);
//Set Selection model for table
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ListSelectionModel rowSM = table.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e){
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
selectedRow = lsm.getMinSelectionIndex();
System.out.println(selectedRow);
}
});
}
//Connection Method
public Connection getConnection(){
Connection conDB = null;
/****** DEFAULT MYSQL DRIVERS **************************/
String url = connection.geturl();
String username = connection.getUsername();
String password = connection.getPassword();
try{
//load the MYSQL driver
Class.forName(connection.getDriver());
conDB = DriverManager.getConnection(url, username, password);
}
catch(Exception e){
System.out.println("Error was: " + e);
}
return conDB;
}
/*-------ACTION PERFORMED ------------------------------*/
int editCounter = 0;
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btnBack){
this.dispose();
}
//DELETE BUTTON BELOW
/*########################################################################*/
if(e.getSource() == btnDelete){
System.out.println("Ran btnDelete");
deleteMember();
}
/*########################################################################*/
//EDIT BUTTON BELOW
/*########################################################################*/
if(e.getSource() == btnEdit){
if(editCounter == 0)
{
System.out.println("Ran btnEdit");
editFunction();
editCounter++;
}
else{
formPanel.repaint();
System.out.println("Stop duplicating form inputs");
}
}
/*########################################################################*/
//SAVE MEMBER BUTTON BELOW
/*########################################################################*/
if(e.getSource() == saveMember){
System.out.println("Ran btnSaveMember");
//UPDATE VALUES
if(radMale.isSelected()){
edGender = "Male";
}
else if(radFemale.isSelected()){
edGender = "Female";
}
if(radPaid.isSelected()){
edMembType = "Paid";
edSongLim = "100";
edCardNo = txtCardNo.getText();
edExpiry = comExpiry.getSelectedItem();
txtCardNo.setEnabled(true);
}
else{
edMembType = "Free";
edSongLim = "10";
edCardNo = "";
edExpiry = "";
txtCardNo.setEnabled(false);
}
//Validate the form
if(txtName.getText().equals(""))
{
isValid = false;
JOptionPane.showMessageDialog(null, "Enter a name please");
}
else{
isValid = true;
if(txtEmail.getText().equals("")){
isValid = false;
JOptionPane.showMessageDialog(null, "Enter an Email please");
}
else
{
isValid = true;
if(txtDescription.getText().equals("")){
isValid = false;
JOptionPane.showMessageDialog(null, "Enter a Description please");
}
else
{
isValid = true;
if(radPaid.isSelected()){
if(txtCardNo.getText().equals("")){
isValid = false;
JOptionPane.showMessageDialog(null, "Enter a Card Number please");
}
else{
isValid = true;
}
}
}
}
}
//If the form is good, execute the update
if(isValid){
saveMember();
}
}//End of saveMember Button
}//End of action performed
/*########################################################################*/
//DELETE MEMBER BELOW
/*#######################DELETE MEMBER####################################*/
public void deleteMember(){
member m = memberTableModel.getRow(selectedRow);
System.out.println("in BTN delete");
try{
//Connection + Statement
conDB = getConnection();
stmt = conDB.createStatement();
String sqlDeleteMem = "delete from members where membId = " + m.getmembId();
//Confirm Dialog - If they click yes dialogResult will = 0
int dialogResult =
JOptionPane.showConfirmDialog(this, "Are you sure you want to delete " + m.getname()
, "Delete Confirmation", dialogButton);
String sqlDeletePlay = "delete from playlist where membId = " + m.getmembId();
if(dialogResult == 0){
stmt.executeUpdate(sqlDeleteMem);
//Delete the playlists associated with the member.
stmt.executeUpdate(sqlDeletePlay);
System.out.println(m.getname() + " Deleted");
}
else{
JOptionPane.showMessageDialog(null, m.getname() + " was not deleted");
}
//Close the DB connection
// stmt.close();
// conDB.close();
}
catch(SQLException er){
System.out.println("Error was: " + er);
}
memberTableModel.LoadTableFromDB();
memberTableModel.fireTableRowsDeleted(selectedRow, selectedRow);
}
/*#########################################################################*/
//SAVE MEMBER BELOW
/*#######################SAVE MEMBER####################################*/
public void saveMember(){
member m = memberTableModel.getRow(selectedRow);
System.out.println("Save member 1");
try{
//CHANGE THE VALUES SO WHEN CLICKS SAVE MEM
/*-------------------------------------*/
//Connection + Statement
conDB = getConnection();
stmt = conDB.createStatement();
//Update Query
String sqlUpdateMem = "UPDATE members SET name = '" + txtName.getText() + "', " +
"email = '" + txtEmail.getText() + "', "
+ "country = '" + comCountry.getSelectedItem() + "', "
+ "favGenre = '" + comGenre.getSelectedItem() + "', "
+ "gender = '" + edGender + "', "
+ "description = '" + txtDescription.getText() + "', "
+ "memberType = '" + edMembType + "', "
+ "songLimit = '" + edSongLim + "', "
+ "card_no = '" + edCardNo + "', "
+ "expiry_date = '" + edExpiry + "' WHERE membId = '"
+ m.getmembId() + "'";
System.out.println(sqlUpdateMem);
System.out.println("Save member 2");
stmt.executeUpdate(sqlUpdateMem);
editCounter = 0;
System.out.println("Updated Member");
//Close the DB connection
conDB.close();
}
catch(SQLException er){
System.out.println("Error was: " + er);
}
}
/*###########################################################################*/
//ADD INPUT FIELDS BELOW
/*#######################INPUT FIELDS####################################*/
public void showInputFields(){
formPanel.setLayout(new FlowLayout());
/*TEXT FIELDS BOXES *******************************/
formPanel.add(lblName);
formPanel.add(txtName);
formPanel.add(lblEmail);
formPanel.add(txtEmail);
formPanel.add(lblDescription);
formPanel.add(txtDescription);
/*TEXT FIELDS BOXES *******************************/
/*COMBO BOXES *******************************/
//Combo Box ( Countrys )
formPanel.add(lblCountry);
formPanel.add(comCountry);
comCountry.addItem("Australia");
comCountry.addItem("New Zealand");
comCountry.addItem("Tasmania");
comCountry.addActionListener(this);
//Combo Box ( Fav Genre )
formPanel.add(lblGenre);
formPanel.add(comGenre);
comGenre.addItem("Pop");
comGenre.addItem("Rock");
comGenre.addItem("Alternative");
comGenre.addItem("Jazz");
comGenre.addItem("Hip/Hop");
comGenre.addActionListener(this);
/*COMBO BOXES *******************************/
/*RADIO BUTTONS BOXES *******************************/
//Radio Buttons (Male/Female)
buttonGroupMF.add(radMale);
buttonGroupMF.add(radFemale);
formPanel.add(radMale);
formPanel.add(radFemale);
radMale.addActionListener(this);
radFemale.addActionListener(this);
//Free or paid members ------
buttonGroupFP.add(radFree);
buttonGroupFP.add(radPaid);
formPanel.add(radFree);
formPanel.add(radPaid);
radFree.addActionListener(this);
radPaid.addActionListener(this);
//Free or paid members ------
/*RADIO BUTTONS BOXES *******************************/
/*PAID MEMBER GUI *******************************/
formPanel.add(lblCardNo);
formPanel.add(txtCardNo);
//Hide
lblCardNo.setVisible(true);
txtCardNo.setVisible(true);
formPanel.add(lblExpiry);
formPanel.add(comExpiry);
comExpiry.addItem("2017");
comExpiry.addItem("2018");
comExpiry.addItem("2019");
//Hide
lblExpiry.setVisible(true);
comExpiry.setVisible(true);
comExpiry.addActionListener(this);
/*PAID MEMBER GUI *******************************/
//Add the button after everything
formPanel.add(saveMember);
saveMember.addActionListener(this);
}
/*###########################################################################*/
//EDIT MEMBER BELOW
/*#######################EDIT MEMBER####################################*/
public void editFunction(){
member m = memberTableModel.getRow(selectedRow);
System.out.println("in BTN edit 1");
//Add boolean value here - Can submit
showInputFields();
try{
System.out.println(" hihi" + m.getmembId());
//Connection + Statement
conDB = getConnection();
stmt = conDB.createStatement();
System.out.println(" hihi" + m.getmembId());
System.out.println("in BTN edit 2");
String sqlEdit = "select * from members where membId = " + m.getmembId();
r = stmt.executeQuery(sqlEdit);
System.out.println("in BTN edit 3");
if(r.next()){
System.out.println("in BTN edit 4");
//Set text for each TextField - Also assign the values to variables
//The variables are used in the SQL UPDATE Query.
//SET THE VALUES FOR THE INPUT FIELDS FROM DB ----------
txtName.setText(r.getString("name"));
txtEmail.setText(r.getString("email"));
txtDescription.setText(r.getString("description"));
comCountry.setSelectedItem(r.getString("country"));
comGenre.setSelectedItem(r.getString("favGenre"));
txtCardNo.setText(r.getString("card_no"));
comExpiry.setSelectedItem(r.getString("expiry_date"));
if(r.getString("memberType").equals("Paid")){
radPaid.setSelected(true);
}
else{
radFree.setSelected(true);
}
if(r.getString("gender").equals("Male")){
radMale.setSelected(true);
// edGender = "Male";
}
else{
radFemale.setSelected(true);
// edGender = "Female";
}
//---------------------------------------------------------
System.out.println("in BTN edit 5");
}
}
catch(SQLException er){
System.out.println("Error was: " + er);
}
memberTableModel.LoadTableFromDB();
System.out.println("in BTN edit 6");
System.out.println("in BTN edit 7");
}
/*##########################################################################*/
}
答案 0 :(得分:1)
JPanel formPanel = new JPanel();
//Adding scroll pane here - to formPanel which holds everything.
JScrollPane scrollPane = new JScrollPane(formPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
...
mainCon.add(scrollPane);
mainCon.add(formPanel);
您不应该在代码中重新生成formPanel
(它将失去已经分配的父级),只需添加已包含scrollPane
formPanel
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
public class Test2 {
public static void main(String args[]) throws Exception {
new SearchAll().setVisible(true);
}
public static class SearchAll extends JFrame implements ActionListener {
private int selectedRow;
//JOptionPane
//Confirm Dialog
private int dialogButton = JOptionPane.YES_NO_OPTION;
//GUI RELATED
private JTable table = new JTable();
//JButtons
private JButton btnDelete = new JButton("Delete");
private JButton btnEdit = new JButton("Edit");
private JButton saveMember = new JButton("Save member");
private JButton btnBack = new JButton("Back");
//Containers, panels
Container mainCon = this.getContentPane();
JPanel formPanel = new JPanel();
//Adding scroll pane here - to formPanel which holds everything.
JScrollPane scrollPane = new JScrollPane(formPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
/*TEXT FIELDS BOXES *******************************/
private JLabel lblName = new JLabel("Name: ");
private JTextField txtName = new JTextField("", 15);
private JLabel lblEmail = new JLabel("Email: ");
private JTextField txtEmail = new JTextField("", 15);
private JLabel lblDescription = new JLabel("Description about you: ");
private JTextArea txtDescription = new JTextArea("", 5, 15);
/*TEXT FIELDS BOXES *******************************/
/*COMBO BOXES *******************************/
private JLabel lblCountry = new JLabel();
private JComboBox comCountry = new JComboBox();
private JLabel lblGenre = new JLabel();
private JComboBox comGenre = new JComboBox();
/*COMBO BOXES *******************************/
/*RADIO BUTTONS *******************************/
private JLabel lblMaleFemale = new JLabel("Gender: ");
private JRadioButton radMale = new JRadioButton("Male: ");
private JRadioButton radFemale = new JRadioButton("Female: ");
private ButtonGroup buttonGroupMF = new ButtonGroup();
private JLabel lblFreePaid = new JLabel("Membership Type: ");
private JRadioButton radFree = new JRadioButton("Free: ");
private JRadioButton radPaid = new JRadioButton("Paid: ");
private ButtonGroup buttonGroupFP = new ButtonGroup();
/*RADIO BUTTONS *******************************/
/*PAID MEMBER STUFF *******************************/
private JLabel lblCardNo = new JLabel("Card Number: ");
private JTextField txtCardNo = new JTextField("", 15);
private JLabel lblExpiry = new JLabel();
private JComboBox comExpiry = new JComboBox();
/*PAID MEMBER STUFF *******************************/
//DB SQL Variables -
private String edName = "";
private String edEmail = "";
private String edDescription = "";
private String edCountry = "";
private String edGenre = "";
private String edGender = "";
private String edMembType = "";
private String edCardNo = "";
private Object edExpiry = "";
private String edSongLim = "";
//DB
private Connection conDB = null;
private Statement stmt = null;
private ResultSet r = null;
//Validation isValid
private boolean isValid;
public SearchAll(){
super("Search/Edit/Delete");
this.setBounds(400, 500, 854,400);
// this.setPreferredSize(new Dimension(500,500));
this.setVisible(true);
//Add table and GUI components
mainCon.add(BorderLayout.NORTH, btnBack);
btnBack.addActionListener(this);
mainCon.add(scrollPane);
formPanel.add(table);
formPanel.add(btnDelete);
formPanel.add(btnEdit);
//Tried doing this - But didn't work. Just stayed static
// formPanel.add(scrollPane);
//Add action listeners
btnEdit.addActionListener(this);
btnDelete.addActionListener(this);
//Set Selection model for table
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setModel(new DefaultTableModel(100, 8));
ListSelectionModel rowSM = table.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e){
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
selectedRow = lsm.getMinSelectionIndex();
System.out.println(selectedRow);
}
});
}
/*-------ACTION PERFORMED ------------------------------*/
int editCounter = 0;
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btnBack){
this.dispose();
}
//DELETE BUTTON BELOW
/*########################################################################*/
if(e.getSource() == btnDelete){
System.out.println("Ran btnDelete");
}
/*########################################################################*/
//EDIT BUTTON BELOW
/*########################################################################*/
if(e.getSource() == btnEdit){
if(editCounter == 0)
{
System.out.println("Ran btnEdit");
editCounter++;
}
else{
formPanel.repaint();
System.out.println("Stop duplicating form inputs");
}
}
/*########################################################################*/
//SAVE MEMBER BUTTON BELOW
/*########################################################################*/
if(e.getSource() == saveMember){
System.out.println("Ran btnSaveMember");
//UPDATE VALUES
if(radMale.isSelected()){
edGender = "Male";
}
else if(radFemale.isSelected()){
edGender = "Female";
}
if(radPaid.isSelected()){
edMembType = "Paid";
edSongLim = "100";
edCardNo = txtCardNo.getText();
edExpiry = comExpiry.getSelectedItem();
txtCardNo.setEnabled(true);
}
else{
edMembType = "Free";
edSongLim = "10";
edCardNo = "";
edExpiry = "";
txtCardNo.setEnabled(false);
}
//Validate the form
if(txtName.getText().equals(""))
{
isValid = false;
JOptionPane.showMessageDialog(null, "Enter a name please");
}
else{
isValid = true;
if(txtEmail.getText().equals("")){
isValid = false;
JOptionPane.showMessageDialog(null, "Enter an Email please");
}
else
{
isValid = true;
if(txtDescription.getText().equals("")){
isValid = false;
JOptionPane.showMessageDialog(null, "Enter a Description please");
}
else
{
isValid = true;
if(radPaid.isSelected()){
if(txtCardNo.getText().equals("")){
isValid = false;
JOptionPane.showMessageDialog(null, "Enter a Card Number please");
}
else{
isValid = true;
}
}
}
}
}
//If the form is good, execute the update
if(isValid){
}
}//End of saveMember Button
}//End of action performed
/*########################################################################*/
//DELETE MEMBER BELOW
/*#######################DELETE MEMBER####################################*/
/*#########################################################################*/
//SAVE MEMBER BELOW
/*#######################SAVE MEMBER####################################*/
/*###########################################################################*/
//ADD INPUT FIELDS BELOW
/*#######################INPUT FIELDS####################################*/
public void showInputFields(){
formPanel.setLayout(new FlowLayout());
/*TEXT FIELDS BOXES *******************************/
formPanel.add(lblName);
formPanel.add(txtName);
formPanel.add(lblEmail);
formPanel.add(txtEmail);
formPanel.add(lblDescription);
formPanel.add(txtDescription);
/*TEXT FIELDS BOXES *******************************/
/*COMBO BOXES *******************************/
//Combo Box ( Countrys )
formPanel.add(lblCountry);
formPanel.add(comCountry);
comCountry.addItem("Australia");
comCountry.addItem("New Zealand");
comCountry.addItem("Tasmania");
comCountry.addActionListener(this);
//Combo Box ( Fav Genre )
formPanel.add(lblGenre);
formPanel.add(comGenre);
comGenre.addItem("Pop");
comGenre.addItem("Rock");
comGenre.addItem("Alternative");
comGenre.addItem("Jazz");
comGenre.addItem("Hip/Hop");
comGenre.addActionListener(this);
/*COMBO BOXES *******************************/
/*RADIO BUTTONS BOXES *******************************/
//Radio Buttons (Male/Female)
buttonGroupMF.add(radMale);
buttonGroupMF.add(radFemale);
formPanel.add(radMale);
formPanel.add(radFemale);
radMale.addActionListener(this);
radFemale.addActionListener(this);
//Free or paid members ------
buttonGroupFP.add(radFree);
buttonGroupFP.add(radPaid);
formPanel.add(radFree);
formPanel.add(radPaid);
radFree.addActionListener(this);
radPaid.addActionListener(this);
//Free or paid members ------
/*RADIO BUTTONS BOXES *******************************/
/*PAID MEMBER GUI *******************************/
formPanel.add(lblCardNo);
formPanel.add(txtCardNo);
//Hide
lblCardNo.setVisible(true);
txtCardNo.setVisible(true);
formPanel.add(lblExpiry);
formPanel.add(comExpiry);
comExpiry.addItem("2017");
comExpiry.addItem("2018");
comExpiry.addItem("2019");
//Hide
lblExpiry.setVisible(true);
comExpiry.setVisible(true);
comExpiry.addActionListener(this);
/*PAID MEMBER GUI *******************************/
//Add the button after everything
formPanel.add(saveMember);
saveMember.addActionListener(this);
}
/*###########################################################################*/
//EDIT MEMBER BELOW
/*#######################EDIT MEMBER####################################*/
/*##########################################################################*/
}
}