Java 添加滚动条时,jList将消失
当我取消注释下面的第6行和第11行时,jList将消失Java 添加滚动条时,jList将消失,java,Java,当我取消注释下面的第6行和第11行时,jList将消失 JScrollPane scrollPane = new JScrollPane(); JList list = new JList(); list.setBackground(Color.CYAN); list.setBounds(284, 22, 127, 102); frame.getContentPane().add(list); //scrollPane = new JScrollPane(list, JScrollPane.V
JScrollPane scrollPane = new JScrollPane();
JList list = new JList();
list.setBackground(Color.CYAN);
list.setBounds(284, 22, 127, 102);
frame.getContentPane().add(list);
//scrollPane = new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVisible(true);
frame.getContentPane().add(scrollPane);
frame.getContentPane().add(textArea);
list.setVisible(true);
//scrollPane.setViewportView(list);
我看到了这个答案
将滚动窗格添加到容器中
但我不知道怎么做
以下是所有课程:
public class Form{
private String dbDriver= "com.mysql.jdbc.Driver";
private String dbURL= "jdbc:mysql://localhost/datas";
private JFrame frame;
private JTextField txtIdPers;
private JTextField txtName;
private JTextField txtIdToDelete;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Form window = new Form();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Form() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
DefaultListModel listModel= new DefaultListModel();
JScrollPane scrollPane = new JScrollPane();
JList list = new JList();
list.setBackground(Color.CYAN);
list.setBounds(284, 22, 127, 102);
frame.getContentPane().add(list);
Button btnDisplayAll = new Button("Display All");
btnDisplayAll.setBounds(341, 205, 70, 22);
frame.getContentPane().add(btnDisplayAll);
displayPersons(btnDisplayAll, textArea, list, listModel);
}
private void displayPersons(Button btnDisplayAll, JTextArea textArea, JList list, DefaultListModel listModel){
btnDisplayAll.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ControllerDB controller = new ControllerDB();
controller.driver= dbDriver;
controller.url= dbURL;
try {
controller.select("*", "person", "");
} catch (SQLException e1) {
e1.printStackTrace();
}
for(int i=0; i<controller.Selected.size();i++){
for(int j=0; j<controller.Selected.get(i).length; j++)
{
listModel.addElement(controller.Selected.get(i)[j]);
}
//listModel.addElement("\n");
}
list.setModel(listModel);
}
});
}
}
公共类表单{
私有字符串dbDriver=“com.mysql.jdbc.Driver”;
私有字符串dbURL=“jdbc:mysql://localhost/datas";
私有JFrame;
私有JTextField txtIdPers;
私有JTextField txtName;
私有JTextField txtidtolete;
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
窗体窗口=新窗体();
window.frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
公共表格(){
初始化();
}
私有void初始化(){
frame=新的JFrame();
机架立根(100450300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
DefaultListModel listModel=新的DefaultListModel();
JScrollPane scrollPane=新的JScrollPane();
JList list=新JList();
列表.背景(颜色为青色);
名单.挫折(284、22、127、102);
frame.getContentPane().add(列表);
按钮btnDisplayAll=新按钮(“全部显示”);
btnDisplayAll.挫折(341205,70,22);
frame.getContentPane().add(btnDisplayAll);
显示人员(btnDisplayAll、textArea、list、listModel);
}
私有void displayPersons(按钮btnDisplayAll、JTextArea textArea、JList list、DefaultListModel listModel){
btnDisplayAll.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
ControllerDB控制器=新的ControllerDB();
controller.driver=dbDriver;
controller.url=dbURL;
试一试{
控制器。选择(“*”、“人”、”);
}捕获(SQLException e1){
e1.printStackTrace();
}
对于(int i=0;i您没有将列表添加到滚动窗格
scrollPane.add(list)
然后拆下那条线
frame.getContentPane().add(list);
将滚动条添加到容器中,如下所示:
JScrollPane scrollPane = new JScrollPane( panelName );
试试看
或者试试这个:
JScrollPane scrollPane = new JScrollPane(listName);
JpanelName.add(scrollPane);
getContentPane().add(JpanelName);
pack();
请记住,当添加到scrollpane的组件的首选大小大于scrollpane的大小时,会出现滚动条
也许可以尝试改用a?可能会有帮助?然后可以使用下面的代码在组件之间添加垂直空间:
JpanelName.add(Box.createVerticalStrut(200));
使用JList()
的一种方法是针对您的问题:
import java.awt.Color;
import java.awt.Component;
import java.awt.Point;
import java.awt.PopupMenu;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
public class ExampJList extends JFrame {
JScrollPane scrollPane = new JScrollPane();
DefaultListModel model = new DefaultListModel();
JList list = new JList(model);
public ExampJList() {
list.setBackground(Color.CYAN);
list.setBounds(284, 22, 127, 102);
getContentPane().add(list);
// You can implement different action for popup
JPopupMenu textArea = new JPopupMenu() {
public void show(Component invoker, int x, int y) {
int row = list.locationToIndex(new Point(x, y));
if (row != -1) {
list.setSelectedIndex(row);
}
super.show(invoker, x, y);
}
};
list.setComponentPopupMenu(textArea);
scrollPane = new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVisible(true);
list.setVisible(true);
scrollPane.setViewportView(list);
getContentPane().add(scrollPane);
setSize(600, 300);
setVisible(true);
updater.start();
}
final Thread updater = new Thread() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
model.addElement(i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
};
public static void main(String[] args) {
new ExampJList();
}
}
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Point;
导入java.awt.PopupMenu;
导入javax.swing.DefaultListModel;
导入javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.jpopmenu;
导入javax.swing.JScrollPane;
公共类ExampJList扩展了JFrame{
JScrollPane scrollPane=新的JScrollPane();
DefaultListModel=新的DefaultListModel();
JList列表=新的JList(型号);
公共考试列表(){
列表.背景(颜色为青色);
名单.挫折(284、22、127、102);
getContentPane().add(列表);
//您可以为弹出窗口执行不同的操作
JPopupMenu textArea=新的JPopupMenu(){
公共void显示(组件调用程序,int x,int y){
int row=list.locationToIndex(新点(x,y));
如果(行!=-1){
列表。设置选定的索引(行);
}
super.show(调用程序,x,y);
}
};
list.setComponentPopupMenu(文本区域);
scrollPane=新的JScrollPane(列表,JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS,JScrollPane.HORIZONTAL\u SCROLLBAR\u ALWAYS);
scrollPane.setVisible(true);
list.setVisible(true);
scrollPane.setViewportView(列表);
getContentPane().add(滚动窗格);
设置大小(600300);
setVisible(真);
updater.start();
}
最终线程更新程序=新线程(){
@凌驾
公开募捐{
对于(int i=0;i<10;i++){
模型.补充件(i);
试一试{
睡眠(500);
}捕捉(中断异常e){
抛出新的运行时异常(e);
}
}
}
};
公共静态void main(字符串[]args){
新的ExampJList();
}
}
执行菜单后,JFrame如下所示:
不起作用。我在本教程中做了,它起作用了,只要它在另一个类中。但在我的应用程序窗口中,我没有扩展JFrame,甚至我扩展了JFrame,也不起作用。它需要在另一个类中起作用吗?如果你需要它在该类中起作用,你想知道你的错误是什么,为什么它仍然是一个问题?也许可以尝试一下在创建滚动条之前创建列表?我检查了您的代码,您没有向滚动条添加任何内容,只是声明了它。可能值得一试。