看了你回答 java中JFrame怎么把一个JFrame窗口中的值传到另一个JFrame窗口去?这个问题

看了你回答 java中JFrame怎么把一个JFrame窗口中的值传到另一个JFrame窗口去?这个问题,第1张

很简单的,就是通过参数传递的方法
我做了个简单的例子,可以参考一下:
//这是bjava文件
import javaawt;
import javaxswing;
import javaawtevent;
public class b extends JFrame implements ActionListener{
JButton button1=new JButton("显示窗体a");
public b()
{
super("我是窗体b");
thissetBounds(250,80,350,400);
thissetVisible(true);
thissetResizable(false);
button1setBounds(35,140,70,20);
button1addActionListener(this);
thisadd(button1);
}
public void actionPerformed(ActionEvent e)
{
if(egetSource()==button1)
{
String title ="我是窗体b传过来的值";
new a(title);
}
}
public static void main(String argv[])
{
new b();
}
}
//这是ajava文件
/
Created with IntelliJ IDEA
User: Administrator
Date: 12-6-19
Time: 上午7:31
To change this template use File | Settings | File Templates
/
import javaawt;
import javaxswing;
import javaawtevent;
public class a extends JFrame{
JLabel label1 = new JLabel("学号:",JLabelCENTER);
public a(String parameter)
{
super("我是窗体a");
String str=parameter;
thissetBounds(250,80,350,400);
thissetVisible(true);
thissetResizable(false);
thisadd(label1);
label1setText(parameter);
}
}

Swing JTable 有一个东西叫 Table Model,它在编辑和显示时是这样工作:

1,当表格要显示前,它会依次询问每一行每一列,你的 getCellRenderer 是什么,对于一般的字符串,我们回答 JLabel,这也是默认的。我们可以提供自已的 TableCellRenderer 来告诉 JTable 这个格子显示成 Checkbox 或下拉框。

2,当我们单击某个格子或键盘移动焦点到某个格子,JTable 会询问,这个格子 (x, y) 是否支持编辑?我们需要在 getTableCellEditor()isCellEditable() 中回答是或否,当否时,JTable 什么也不做,当回答是时,JTable 会接着询问,getTableCellEditor()getTableCellEditorComponent() 是什么,默认时它是一个 JTextField,当然我们可以回答它是一个 JCheckBox 或 JComboBox 来告诉 JTable 我们有一个自定义的编辑器。

在准备显示值时都会从 Table Model 中把值交给当前的 Cell Renderer 或 Cell Editor,当用户按确定或鼠标移走导致焦点丢失时需要验证这个正在编辑的值是否正确合法(我们基于业务规则来验证,比如是否是个数字)并在正确时 commit 回 Table Mode (commit 过程本身我们不需要 *** 作,只需要告诉 JTable true 或 false),验证失败时直接丢弃这个编辑值。

我们提供一个自己的 TableCellRenderer 和 TableCellEditor 然后在每一个方法里面打印一下内容来观察它的工作过程和调用次序。然后我们给出自己的实现方法。

基于上面的了解,你这个问题,只需要在询问第一列是否可以编辑时统统回答No,然后自己自动生成这一列的值。至于其它的你不需要特别的 Cell Editor ,你只需要继承一个默认的 DefaultCellEditor,它只需要回答对第一列不可编辑就可,其它方法统统不要覆盖,直接使用继承来的。创建 JTable 时设置这个 Cell Editor 如果你希望第一列的背景色略有不同那你得用一个不同的 Cell Renderer,继承自 JLabel,但当是第一列时就给它改一下 JLabel 的背景颜色,其它不变地继承使用继承来的方法不要覆盖掉,同样是创建 JTable 后就设置 Cell Renderer。

记得因为第一列在 JTable 看来是数据,当在我们概念上看来不是数据,因此我们需要注意列号偏移了一位,比如我们在 Vector [ Vector] 这个二组的数组中用 0 列表示第一列,从#1列开始才是数据。

看看我写的一个 MyCellRenderer,它添加一个分隔符在其中,可以拖动,只是这个 UI 难看了点。

package comtsuiutil;
import javaawtComponent;
import javaawtGraphics;
import javaawtInsets;
import javaawteventMouseEvent;
import javautilEventObject;
import javaxswingDefaultCellEditor;
import javaxswingJButton;
import javaxswingJFrame;
import javaxswingJLabel;
import javaxswingJScrollPane;
import javaxswingJTable;
import javaxswingJTextField;
import javaxswingUIManager;
import javaxswingborderBorder;
import javaxswingtableDefaultTableCellRenderer;
import javaxswingtableTableColumn;
import javaxswingtableTableColumnModel;
import sunswingtableDefaultTableCellHeaderRenderer;
public class CLTreeTable extends JTable {
private static final int SEPARATOR = 2;
class MyCellRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if (column == SEPARATOR) {
JButton renderer = new JButton();
renderersetBorder(new MyBorder(renderergetBorder()));
return renderer;
} else {
return supergetTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
}
}
}
class MyHeaderRenderer extends DefaultTableCellHeaderRenderer {
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if (column == SEPARATOR) {
JButton renderer = new JButton();
renderersetBorder(new MyBorder(renderergetBorder()));
return renderer;
} else {
return supergetTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
}
}
public void paintComponent(Graphics graphic) {
superpaintComponent(graphic);
}
}
class MyCellEditor extends DefaultCellEditor {
public MyCellEditor(JTextField textField) {
super(textField);
}
public boolean isCellEditable(EventObject anEvent) {
if (anEvent instanceof MouseEvent) {
MouseEvent event = (MouseEvent) anEvent;
int column = CLTreeTablethiscolumnAtPoint(eventgetPoint());
if (column == SEPARATOR) {
return false;
}
}
return superisCellEditable(anEvent);
}
}
class MyBorder implements Border {
private Border delegate;
MyBorder(Border delegate) {
thisdelegate = delegate;
}
public void paintBorder(Component c, Graphics g, int x, int y,
int width, int height) {
thisdelegatepaintBorder(c, g, x, y, width, height);
}
public Insets getBorderInsets(Component c) {
return new Insets(0, 1, 0, 1);
}
public boolean isBorderOpaque() {
return thisdelegateisBorderOpaque();
}
}
public CLTreeTable(Object[][] data, Object[] header) {
super(data, header);
supersetDefaultRenderer(Objectclass, new MyCellRenderer());
supersetDefaultEditor(Objectclass, new MyCellEditor(new JTextField()));
supergetTableHeader()setDefaultRenderer(new MyHeaderRenderer());
if (headerlength > SEPARATOR) {
TableColumnModel model = supergetColumnModel();
TableColumn column = modelgetColumn(SEPARATOR);
columnsetMaxWidth(16); // Swing's default minimum width;
}
}
public static void main(String[] args) {
JFrame frame = new JFrame();
framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
String[][] data = new String[][] {
{ "A1", "B1", "", "C1", "D1", "E1" },
{ "A2", "B2", "", "C2", "D2", "E2" } };
String[] header = new String[] { "A", "B", "", "C", "D", "E" };
JScrollPane box = new JScrollPane(new CLTreeTable(data, header));
framegetContentPane()add(box);
framesetBounds(100, 100, 400, 400);
framesetTitle("My CL Tree Table");
framesetVisible(true);
}
}

1、打开Myeclipse的相关界面,在Window那里点击Preferences。

2、d出设置的对话框,选择General下的Appearance进入。

3、点击ColorsandFonts按钮,需要在右侧选择Java。

4、选择JavaEditorTextFont,并点击Edit。

5、通过设置对应的参数以后,直接确定返回。

6、这样一来会看到图示的结果,即可设置JLabel的字体样式,大小,颜色了。

额听不太明白喔。
swing画图的话可以用画笔Graphics g调用gdrawImage()实现画图(一般在JPanel里画),
更简单的方法是把放在JLabel里面 new JLabel(new ImageIcon)
你说的移动我就不太明白了,指的是鼠标移动吗?那就用鼠标监听去实现咯。

Java中的鼠标和键盘事件

使用MouseListener借口处理鼠标事件

鼠标事件有 种 按下鼠标键 释放鼠标键 点击鼠标键 鼠标进入和鼠标退出

鼠标事件类型是MouseEvent 主要方法有

getX() getY() 获取鼠标位置

getModifiers() 获取鼠标左键或者右键

getClickCount() 获取鼠标被点击的次数

getSource() 获取鼠标发生的事件源

事件源获得监视器的方法是addMouseListener() 移去监视器的方法是removeMouseListener()

处理事件源发生的时间的事件的接口是MouseListener 接口中有如下的方法

mousePressed(MouseEvent) 负责处理鼠标按下事件

mouseReleased(MouseEvent) 负责处理鼠标释放事件

mouseEntered(MouseEvent) 负责处理鼠标进入容器事件

mouseExited(MouseEvent) 负责处理鼠标离开事件

mouseClicked(MouseEvent) 负责处理点击事件

使用MouseMotionListener接口处理鼠标事件

事件源发生的鼠标事件有 种 拖动鼠标和鼠标移动

鼠标事件的类型是MouseEvent

事件源获得监视器的方法是addMouseMotionListener()

处理事件源发生的事件的接口是MouseMotionListener 接口中有如下的方法

mouseDragged() 负责处理鼠标拖动事件

mouseMoved() 负责处理鼠标移动事件

控制鼠标的指针形状

setCursor(Cursor getPreddfinedCursor(Cursor 鼠标形状定义)) 鼠标形状定义见(书 P )

键盘事件

键盘事件源使用addKeyListener 方法获得监视器

键盘事件的接口是KeyListener 接口中有 个方法

public void keyPressed(KeyEvent e) 按下键盘按键

public void keyReleased(KeyEvent e) 释放键盘按键

public void keyTypde(KeyEvent e) 按下又释放键盘按键

package mouseenvent;

import java awt ;

import javax swing ;

import java awt event ;

public class Mouse extends JFrame implements MouseListener{

JPanel jp = new JPanel();

JLabel statu ar = new JLabel();

static final long serialVersionUID= ;

public Mouse(){

setTitle( Mouse Event );

getContentPane() add(jp BorderLayout CENTER);

getContentPane() add(statu ar BorderLayout SOUTH);

jp addMouseListener(this);

}

public static void main(String[] args){

Mouse frame = new Mouse();

frame setSize( );

frame setVisible(true);

frame setDefaultCloseOperation(JFrame EXIT_ON_CLOSE);

}

public void mousePressed(MouseEvent e){

int x = e getX();

int y = e getY();

String s = 鼠标在坐标 + ( +x+ +y+ ) + 处按下 ;

statu ar setText(s);

}

public void mouseReleased(MouseEvent e){

int x = e getX();

int y = e getY();

String s = 鼠标在坐标 + ( +x+ +y+ ) + 处释放 ;

statu ar setText(s);

}

public void mouseClicked(MouseEvent e){

int x = e getX();

int y = e getY();

String s = 鼠标在坐标 + ( +x+ +y+ ) + 处点击 ;

statu ar setText(s);

}

public void mouseEntered(MouseEvent e){

int x = e getX();

int y = e getY();

String s = 鼠标在坐标 + ( +x+ +y+ ) + 处进入 ;

statu ar setText(s);

}

public void mouseExited(MouseEvent e){

int x = e getX();

int y = e getY();

String s = 鼠标在坐标 + ( +x+ +y+ ) + 处离开 ;

statu ar setText(s);

}

}

package mouseenvent;

import java awt ;

import javax swing ;

import java awt event ;

public class MouseMotion extends JFrame implements MouseMotionListener{

static final long serialVersionUID= ;

JLabel bar = new JLabel();

JTextField text = new JTextField();

public MouseMotion(){

setTitle( Mouse Event );

getContentPane() add(text BorderLayout NORTH);

getContentPane() add(bar BorderLayout SOUTH);

addMouseMotionListener(this);

}

public void mousePressed(MouseEvent e){

int x = e getX();

int y = e getY();

String s = x = +x+ y = +y;

bar setText(s);

text setText(s);

}

public void mouseDragged(MouseEvent e){

int x = e getX();

int y = e getY();

String s = x = +x+ y = +y;

bar setText(s);

text setText(s);

}

public void mouseMoved(MouseEvent e){

int x = e getX();

int y = e getY();

String s = x = +x+ y = +y;

bar setText(s);

text setText(s);

}

public static void main(String args[])throws Exception{

MouseMotion mouse = new MouseMotion();

mouse setSize( );

mouse setVisible(true);

mouse setDefaultCloseOperation(JFrame EXIT_ON_CLOSE);

}

}

package mouseenvent;

import java awt event ;

import javax swing ;

import java awt ;

public class Key extends JFrame implements KeyListener{

JLabel bar ;

public Key(){

bar = new JLabel();

getContentPane() add(bar BorderLayout CENTER);

addKeyListener(this);

}

public void keyPressed(KeyEvent e){

char c = e getKeyChar();

String s = c+ ;

bar setText(s);

}

public void keyReleased(KeyEvent e){

char c = e getKeyChar();

}

public void keyTyped(KeyEvent e){

char c = e getKeyChar();

}

public static void main(String args[])throws Exception{

Key key = new Key();

key setSize( );

key setVisible(true);

key setDefaultCloseOperation(JFrame DISPOSE_ON_CLOSE);

}

lishixinzhi/Article/program/Java/hx/201311/25830


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

原文地址: https://outofmemory.cn/yw/13363765.html

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

发表评论

登录后才能评论

评论列表(0条)

保存