Java 每当发生更新时,JList位置将重置为默认值
Java 每当发生更新时,JList位置将重置为默认值,java,swing,jlist,Java,Swing,Jlist,list接受来自Action1的输入。但是,每当向列表中添加新元素时,列表的位置将移回默认的中上位置 调整帧的大小时也会发生这种情况,因此作为临时修复,我会修改行frame.setresizeable(false),但我不希望这是永久性的 我如何解决这两个问题 导入静态java.lang.String.*; 导入javax.swing.*; 导入java.awt.*; 导入java.awt.event.*; 导入java.awt.event.ActionListener; 公开班级名单 {
list
接受来自Action1
的输入。但是,每当向列表中添加新元素时,列表的位置将移回默认的中上位置
调整帧的大小时也会发生这种情况,因此作为临时修复,我会修改行frame.setresizeable(false)
,但我不希望这是永久性的
我如何解决这两个问题
导入静态java.lang.String.*;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.awt.event.ActionListener;
公开班级名单
{
静态字符串newUrl;
静态DefaultListModel模型=新的DefaultListModel();
静态int-listXCoord=650;
静态int-listYCoord=10;
公共静态void createGUI()
{
JFrame=新JFrame();
frame.setVisible(true);
框架。设置尺寸(800600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setresizeable(false);
JPanel面板=新的JPanel();
框架。添加(面板);
JButton addurl=新JButton(“添加URL”);
panel.add(addurl);
addurl.addActionListener(新Action1());
JButton remurl=新JButton(“删除URL”);
panel.add(remurl);
//模型。附录(“一”);
//模型.附录(“二”);
//模型。附录(“三”);
JList列表=新的JList(型号);
setCellRenderer(新的DefaultListCellRenderer());
list.setVisible(true);
list.setLocation(listXCoord、listYCoord);
挫折背景(新颜色(186203250));
//列表。设置位置(650,10);
面板。添加(列表);
列表。设置大小(130540);
}
静态类Action1实现ActionListener
{
已执行的公共无效操作(操作事件e)
{
newUrl=JOptionPane.showInputDialog(“输入要启动的URL”);
模型添加元素(newUrl);
}
}
公共静态void main(字符串[]args)
{
createGUI();
}
}
基本上,您正在与布局管理器(Flowlayout
)进行斗争,并且失败了。将新元素添加到JList
时,容器层次结构将重新验证,这将导致布局管理器重新布局其容器的内容
基本的解决方案是使用不同的布局,但是,JFrame
使用了BorderLayout
,因此不必将JList
添加到JPanel
中,只需将其添加到框架的EAST
位置即可
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.DefaultListCellRenderer;
导入javax.swing.DefaultListModel;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公开班级名单{
静态字符串newUrl;
静态DefaultListModel模型=新的DefaultListModel();
静态int-listXCoord=650;
静态int-listYCoord=10;
公共静态void createGUI(){
JFrame=新JFrame();
框架设置尺寸(800600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel面板=新的JPanel();
框架。添加(面板);
JButton addurl=新JButton(“添加URL”);
panel.add(addurl);
addurl.addActionListener(新Action1());
JButton remurl=新JButton(“删除URL”);
panel.add(remurl);
//模型。附录(“一”);
//模型.附录(“二”);
//模型。附录(“三”);
JList列表=新的JList(型号);
setCellRenderer(新的DefaultListCellRenderer());
list.setVisible(true);
list.setLocation(listXCoord、listYCoord);
挫折背景(新颜色(186203250));
//列表。设置位置(650,10);
添加(新的JScrollPane(列表),BorderLayout.EAST);
frame.setVisible(true);
}
静态类Action1实现ActionListener{
已执行的公共无效操作(操作事件e){
newUrl=JOptionPane.showInputDialog(“输入要启动的URL”);
模型添加元素(newUrl);
}
}
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
例如printStackTrace();
}
createGUI();
}
});
}
}
有关详细信息,请参见和
最后,您还应该调用setVisible
last,在将所有组件添加到框架后,这将减少某些组件在您认为应该显示时无法显示的可能性
JList
还将受益于JScrollPane
中包含的内容。有关更多详细信息,请参见和尝试使用布局管理器,而不是FlowLayout
JList
也应包含在JScrollPane
中。看一看,想知道更多的细节,你在和版图管理员较量,你到底是怎么回答得这么快的?当我掌握了一半的代码时,你总是比我先发布一个文档化的答案和一个可运行的示例!该死我钦佩你:)MadpaiSenpai lolbtw你有一个打字错误,一些旅游组件(旅游->你的)@Frakcool Fat fingers;)-另外,我使用了很多模板,还有一个小程序,里面有“常用引号”,这使得生成答案变得更加容易…我所需要的就是k
import static java.lang.String.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionListener;
public class lists
{
static String newUrl;
static DefaultListModel<String> model = new DefaultListModel<String>();
static int listXCoord = 650;
static int listYCoord = 10;
public static void createGUI()
{
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setSize(800,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
JPanel panel = new JPanel();
frame.add(panel);
JButton addurl = new JButton("Add URL");
panel.add(addurl);
addurl.addActionListener(new Action1());
JButton remurl = new JButton("Remove URL");
panel.add(remurl);
//model.addElement("one");
//model.addElement("two");
//model.addElement("three");
JList list = new JList<String>(model);
list.setCellRenderer(new DefaultListCellRenderer());
list.setVisible(true);
list.setLocation(listXCoord, listYCoord);
list.setBackground(new Color(186, 203, 250));
//list.setLocation(650, 10);
panel.add(list);
list.setSize(130, 540);
}
static class Action1 implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
newUrl = JOptionPane.showInputDialog("Enter the URL to be Launched");
model.addElement(newUrl);
}
}
public static void main(String[] args)
{
createGUI();
}
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Lists {
static String newUrl;
static DefaultListModel<String> model = new DefaultListModel<String>();
static int listXCoord = 650;
static int listYCoord = 10;
public static void createGUI() {
JFrame frame = new JFrame();
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.add(panel);
JButton addurl = new JButton("Add URL");
panel.add(addurl);
addurl.addActionListener(new Action1());
JButton remurl = new JButton("Remove URL");
panel.add(remurl);
//model.addElement("one");
//model.addElement("two");
//model.addElement("three");
JList list = new JList<String>(model);
list.setCellRenderer(new DefaultListCellRenderer());
list.setVisible(true);
list.setLocation(listXCoord, listYCoord);
list.setBackground(new Color(186, 203, 250));
//list.setLocation(650, 10);
frame.add(new JScrollPane(list), BorderLayout.EAST);
frame.setVisible(true);
}
static class Action1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
newUrl = JOptionPane.showInputDialog("Enter the URL to be Launched");
model.addElement(newUrl);
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
createGUI();
}
});
}
}