昨天突然想调以下关于自定义皮肤,想用synth方法,但不知道怎么老是出错..... (我是初学者,请高手帮忙解答)我不明白的地方是:
1:下面几行代码要在那个位置上添加?
SynthLookAndFeel synth = new SynthLookAndFeel();
synth.load(Application1.class.getResourceAsStream("demo.xml"),Application1.class);
UIManager.setLookAndFeel(synth);
我模仿网上的例子,在线程里添加并创建窗口,但没能输出!!程序如下:
其中xml文件内容如下:
<synth>
<style id="label">
<font name="Monospaced" size="18" style="BOLD ITALIC"/>
<opaque value="true"/>
<state>
<color value="PINK" type="FOREGROUND"/>
<color value="BLUE" type="BACKGROUND"/>
</state>
</style>
<bind style="label" type="region" key="Label"/>
<style id="button">
<font name="Monospaced" size="18" style="BOLD ITALIC"/>
<opaque value="true"/>
<state>
<color value="PINK" type="FOREGROUND"/>
<color value="BLUE" type="BACKGROUND"/>
</state>
</style>
<bind style="button" type="region" key="Button"/>
</synth>
1:下面几行代码要在那个位置上添加?
SynthLookAndFeel synth = new SynthLookAndFeel();
synth.load(Application1.class.getResourceAsStream("demo.xml"),Application1.class);
UIManager.setLookAndFeel(synth);
我模仿网上的例子,在线程里添加并创建窗口,但没能输出!!程序如下:
其中xml文件内容如下:
<synth>
<style id="label">
<font name="Monospaced" size="18" style="BOLD ITALIC"/>
<opaque value="true"/>
<state>
<color value="PINK" type="FOREGROUND"/>
<color value="BLUE" type="BACKGROUND"/>
</state>
</style>
<bind style="label" type="region" key="Label"/>
<style id="button">
<font name="Monospaced" size="18" style="BOLD ITALIC"/>
<opaque value="true"/>
<state>
<color value="PINK" type="FOREGROUND"/>
<color value="BLUE" type="BACKGROUND"/>
</state>
</style>
<bind style="button" type="region" key="Button"/>
</synth>
全部程序代码如下:import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableColumn;
import java.text.NumberFormat;
import java.util.Locale;
import javax.swing.event.*;
import javax.swing.plaf.synth.SynthLookAndFeel;
import javax.swing.UIManager;
import java.io.InputStream;
import java.text.ParseException;
public class BankLoan extends JFrame implements ActionListener
{
private JButton button=new JButton("计算");
private JLabel label_monney=new JLabel("贷款总金额");
private JTextField text_monney=new JTextField();
private JLabel label_tax=new JLabel("贷款利率");
private JTextField text_tax=new JTextField();
private JLabel label_pt=new JLabel("贷款期限");
private JTextField text_pt=new JTextField();
private JLabel label_time=new JLabel("起始时间(年/月)");
private JTextField text_timey=new JTextField();
private JTextField text_timem=new JTextField();
private JDialog dialog=new JDialog(this,"提示",true);
private Label dialog_label=new Label("请填写完整的信息再进行计算",Label.CENTER);
private JTable table=new JTable();
public Vector srcdata=new Vector();
Loan loan_now=new Loan();
public BankLoan() {
super("银行贷款还本利息计算工具");
final String[] columnNames = {"期次", "本金余额", "月还本金", "月还利息","月还本息"};
Vector srcdataname=new Vector();
srcdataname.add(columnNames[0]);
srcdataname.add(columnNames[1]);
srcdataname.add(columnNames[2]);
srcdataname.add(columnNames[3]);
srcdataname.add(columnNames[4]);
Container container=this.getContentPane();
this.setSize(650,400);
this.setLocation(50,100);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel panel1=new JPanel(new java.awt.FlowLayout(FlowLayout.CENTER));
JPanel panel2=new JPanel(new GridLayout(2,6));
JPanel panel3=new JPanel(new GridLayout(1,1));
JPanel panel4=new JPanel(new GridLayout(1,3));
panel2.add(label_monney);
panel2.add(text_monney);
Label label_yuan=new Label("元");
panel2.add(label_yuan);
panel2.add(label_tax);
panel2.add(text_tax);
Label label_yuan1=new Label("%/月");
panel2.add(label_yuan1);
panel2.add(label_pt);
panel2.add(text_pt);
Label label_yuann=new Label("年");
panel2.add(label_yuann);
panel2.add(label_time);
panel2.add(text_timey);
panel2.add(text_timem);
panel1.add(panel2);
panel1.add(panel3);
panel3.add(button);
this.add(panel1,BorderLayout.NORTH);
button.addActionListener(this);
DefaultTableModel model=new DefaultTableModel(srcdata,srcdataname);
JScrollPane scrollpane=new JScrollPane(table);
table.setModel(model);
container.add(scrollpane,BorderLayout.CENTER);
// this.setVisible(true);
dialog.setSize(250,130);
dialog.add(dialog_label);
dialog.setDefaultCloseOperation(HIDE_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==button)
{
if(text_monney.getText().length()==0||text_pt.getText().length()==0||text_tax.getText().length()==0||text_timey.getText().length()==0||text_timem.getText().length()==0)
{
dialog.setLocation(this.getX()+70,this.getY()+60);
dialog.setVisible(true);
}
else
{
if(Integer.parseInt(text_timem.getText())<=12&&Integer.parseInt(text_timem.getText())>=1)//输入合法
{
srcdata.clear();
loan_now.init(text_monney.getText(),text_tax.getText(),text_pt.getText(),text_timey.getText(),text_timem.getText());
Vector dataadd=new Vector(5);
Vector dataaddx=new Vector(20);
for(int x=0;x<Integer.parseInt(text_pt.getText())*12;x++)
{
srcdata.add(loan_now.GetResult(x));
table.repaint();
table.updateUI();
}
DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
TableColumnModel Columnmodel = table.getColumnModel();
tcr.setBackground(new Color(220,220,150));
Columnmodel.getColumn(0).setCellRenderer(tcr);
TableColumn tcolumn=new TableColumn();
table.setColumnSelectionAllowed (true);//设置可否被选择.默认为false
table.setColumnSelectionInterval(0,0);
table.setSelectionBackground (Color.white);//
}//开始计算
else
{
dialog_label.setText("起始月份应该在1~12之间,请重新输入!");
dialog.setLocation(this.getX()+70,this.getY()+60);
dialog.setVisible(true);
}
}
}
}
public static void main(String args[])
{
SynthLookAndFeel synth = new SynthLookAndFeel();
try {
Class aClass = BankLoan.class;
InputStream is =
aClass.getResourceAsStream("synth.xml");
if (is == null) {
System.err.println("Missing configuration file");
System.exit(-1);
}
synth.load(is, aClass);
} catch (ParseException e) {
System.err.println("Bad configuration file");
System.exit(-2);
}
try {
UIManager.setLookAndFeel(synth);
} catch
(javax.swing.UnsupportedLookAndFeelException e) {
System.err.println("Cannot change to Synth");
System.exit(-3);
}
BankLoan a=new BankLoan();
a.setVisible(true);
}
}
private int loan_money;
private float loan_tax;
private int loan_pt;
private float Rtrunmm;
private int loan_year;
private int loan_month;
public void init(String str_money,String str_tax,String str_pt,String str_year,String str_month)
{
this.loan_money=Integer.parseInt(str_money);
this.loan_pt=Integer.parseInt(str_pt)*12;
this.Rtrunmm=(float)this.loan_money/(float)this.loan_pt;
this.loan_tax=Float.valueOf(str_tax);
this.loan_year=Integer.parseInt(str_year);
this.loan_month=Integer.parseInt(str_month);
} public Vector GetResult(int x)
{
String str=" ";
Vector data1=new Vector(5);
NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.CHINA);
str=String.valueOf(this.loan_year)+"年"+(String.valueOf(this.loan_month))+"月";
data1.add(str);
if((this.loan_month+1)>12)
{this.loan_year++;this.loan_month=1;}
else {this.loan_month++;}
str="¥"+numberFormat.format(new BigDecimal(String.valueOf(this.loan_money-((x)*this.Rtrunmm))).setScale(2, BigDecimal.ROUND_HALF_UP));
data1.add(str);
str="¥"+numberFormat.format(new BigDecimal(String.valueOf(this.Rtrunmm)).setScale(2, BigDecimal.ROUND_HALF_UP));
data1.add(str);
str="¥"+numberFormat.format(new BigDecimal(String.valueOf(this.loan_tax*(loan_money-(x*this.Rtrunmm))/100)).setScale(2, BigDecimal.ROUND_HALF_UP));
data1.add(str);
str="¥"+ numberFormat.format(new BigDecimal(String.valueOf(this.Rtrunmm+(this.loan_tax*(loan_money-(x*this.Rtrunmm))/100))).setScale(2, BigDecimal.ROUND_HALF_UP));
data1.add(str);
return data1 ;
}
}
SynthLookAndFeel synth =newSynthLookAndFeel();
synth.load(Application1.class.getResourceAsStream("demo.xml"),Application1.class);
UIManager.setLookAndFeel(synth); 这些必须要放在构造所有SWING组件之前加入,否则效果是出不来的。所以我这段程序应该要改以下组件的添加顺序。
不知道我想的正不正确呢???