如何在JList中,添加一个按钮.就是说JList的一行里面, 有一个JLabe, JTextField和JButton. 附有注释的用例

如何在JList中,添加一个按钮.就是说JList的一行里面, 有一个JLabe, JTextField和JButton. 附有注释的用例,第1张

每一行都要JLabe, JTextField和JButton共3个元素,每一行有3套聚焦点。

等于要手工实现JList的JList—二维的JList

Java对这种情况预置了JTable。省去了重复发明轮子的过程

学和用JTable把。

简写的代码可以实现一行三个,但没有实现聚焦系统。不实用。还是直接用JTable

import java.awt.Component

import java.util.Vector

import javax.swing.JButton

import javax.swing.JFrame

import javax.swing.JLabel

import javax.swing.JList

import javax.swing.JPanel

import javax.swing.JTextField

import javax.swing.ListCellRenderer

public class Test{

static public class Row extends JPanel {

private static final long serialVersionUID = 1234L

public JLabel label

public JButton button

public JTextField field

public Row(){

super()

label=new JLabel() button=new JButton() field=new JTextField()

add(label) add(field) add(button)

}

}

public static void main(String[] args) {

JFrame f=new JFrame("示例")

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

f.setSize(640, 480)

Vector<Row> rows=new Vector<Row>()

for(int i=0i<20i++){

Row r=new Row()

r.button.setText("按钮"+i)

r.field.setText("文本框"+i)

r.label.setText("标签"+i)

rows.add(r)

}

JList<Row> l=new JList<Row>(rows)

l.setCellRenderer(new ListCellRenderer<Row>(){

@Override

public Component getListCellRendererComponent(

JList<? extends Row> list, Row value, int index,

boolean isSelected, boolean cellHasFocus) {

return value

}

})

f.add(l)

f.setVisible(true)

}

}

你 new 出来的对象不是同一个对象

这种情况不是向List中添加多个元素,而是你在容器中生成了多个List

一个对象只能New一次,在此的话就不是同一个对象了

你想要显示多个元素。 直接把元素放在数组中 ,只写一句

Jlist jlist=new Jlist(a)就把jlist添加到窗体中就Ok了

如果你把Jlist jlist=new Jlist(a)这句话放在 按钮事件中,你试想下,你每次按下后,都要执行Jlist jlist=new Jlist(a)这句话,我们是不是创建了多个对象那?如果你只是单纯的想通过按钮来添加数组中的元素

Jlist jlist=new Jlist()//定义成为类成员 放在按钮事件的外部

int i=0 //定义成为类成员 放在按钮事件的外部

按钮事件中代码可以这么写

jlist.add(a[i])

i++ //每次单击一次按钮 添加一个元素

package test

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import javax.swing.DefaultListModel

import javax.swing.JButton

import javax.swing.JList

import javax.swing.WindowConstants

public class ListFrame extends javax.swing.JFrame {

private JList jList1

private JButton jButton1

private JButton jButton2

private JList jList2

private DefaultListModel listModel1

private DefaultListModel listModel2

private JButton jButton4

private JButton jButton3

{

//Set Look &Feel

try {

javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel")

} catch(Exception e) {

e.printStackTrace()

}

}

/**

* Auto-generated main method to display this JFrame

*/

public static void main(String[] args) {

ListFrame inst = new ListFrame()

inst.setVisible(true)

}

public ListFrame() {

super()

initGUI()

}

private void initGUI() {

try {

setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)

getContentPane().setLayout(null)

{

listModel1 = new DefaultListModel()

listModel1.addElement("item 1")

listModel1.addElement("item 2")

listModel1.addElement("item 3")

listModel1.addElement("item 4")

listModel1.addElement("item 5")

listModel1.addElement("item 6")

jList1 = new JList(listModel1)

getContentPane().add(jList1)

jList1.setBounds(42, 28, 119, 203)

}

{

listModel2 = new DefaultListModel()

jList2 = new JList(listModel2)

getContentPane().add(jList2)

jList2.setBounds(238, 28, 119, 196)

}

{

jButton1 = new JButton()

getContentPane().add(jButton1)

jButton1.setText(">")

jButton1.setBounds(168, 84, 63, 28)

jButton1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) {

jButton1ActionPerformed(evt)

}

})

}

{

jButton2 = new JButton()

getContentPane().add(jButton2)

jButton2.setText("<")

jButton2.setBounds(168, 133, 63, 28)

jButton2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) {

jButton2ActionPerformed(evt)

}

})

}

{

jButton3 = new JButton()

getContentPane().add(jButton3)

jButton3.setText("添加")

jButton3.setBounds(168, 35, 63, 28)

jButton3.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) {

jButton3ActionPerformed(evt)

}

})

}

{

jButton4 = new JButton()

getContentPane().add(jButton4)

jButton4.setText("删除")

jButton4.setBounds(168, 189, 63, 28)

jButton4.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) {

jButton4ActionPerformed(evt)

}

})

}

pack()

setSize(400, 300)

setLocationRelativeTo(null)

} catch (Exception e) {

e.printStackTrace()

}

}

/** jList1移动到jList2*/

private void jButton1ActionPerformed(ActionEvent evt) {

if(jList1.getSelectedIndex()!=-1){

listModel2.addElement(jList1.getSelectedValue())

int i=jList1.getSelectedIndex()

listModel1.remove(i)

jList1.setSelectedIndex(i>0? i-1:0)

jList2.setSelectedIndex(listModel2.size()-1)

}

}

/** jList2移动到jList1*/

private void jButton2ActionPerformed(ActionEvent evt) {

if(jList2.getSelectedIndex()!=-1){

listModel1.addElement(jList2.getSelectedValue())

int i=jList2.getSelectedIndex()

listModel2.remove(i)

jList2.setSelectedIndex(i>0? i-1:0)

}

}

/** jList1增加项*/

private void jButton3ActionPerformed(ActionEvent evt) {

listModel1.addElement("new item")

}

/** jList1删除项*/

private void jButton4ActionPerformed(ActionEvent evt) {

if(jList1.getSelectedIndex()!=-1){

listModel1.remove(jList1.getSelectedIndex())

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11466607.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存