markdown:
# Vẽ hình nền trên JFrame
Source code để vẽ 1 hình trên JFrame
|
|
02
03
04
05
06
07
08
09
10
11
12 {
13
14 JScrollPane scrollPane;
15 ImageIcon icon;
16
17
18 {
19 icon =
20
21 JPanel panel =
22 {
23
24 {
25 // Trường hợp 1: Hiển thị hình ảnh với kích cỡ đầy đủ
26 //g.drawImage(icon.getImage(), 0, 0, null);
27 // Trường hợp 2: Co giãn kích thước hình ảnh lớn bằng kích thước JFrame
28 Dimension d = getSize();
29 g.drawImage(icon.getImage(), 0, 0, d.width, d.height,
30 // Trường hợp 3: Cố định vị trí hình ảnh trong scroll pane
31 // Point p = scrollPane.getViewport().getViewPosition();
32 // g.drawImage(icon.getImage(), p.x, p.y, null);
33 setOpaque(
34
35 }
36 };
37 ////vẽ 1 button lên JFrame để thử
38 JButton button =
39 panel.add( button );
40
41 scrollPane =
42 setContentPane( scrollPane );
43 }
44
45
46 {
47 PaintFrame frame =
48 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
49 frame.setSize(300, 300);
50 frame.setVisible(
51 }
52 }
Kết quả như hình sau
Chúc thành công!
## dao said
sao em làm theo thầy nó báo lỗi này ạ :
1) cannot find symbol method velenhinh(java.awt.Graphics)
Code của em là :
public class hinhnen extends JFrame{
private static final long serialVersionUID = 1L;
private JScrollPane scrollPane;
private ImageIcon icon;
private JPanel panel;
private JButton button;
public hinhnen() {
icon = new ImageIcon(“xau.jpg”);
panel = new JPanel()
{
public void velenhinh(Graphics gra)
{
gra.drawImage(icon.getImage(), 0, 0, null);
Dimension d = getSize();
gra.drawImage(icon.getImage(), 0, 0, d.width, d.height, null);
//Point p = scrollPane.getViewport().getViewPosition();
//gra.drawImage(icon.getImage(), p.x, p.y, null);
setOpaque( false );
super.velenhinh(gra);
}
};
button=new JButton(“de len hinh ne”);
panel.add( button );
scrollPane = new JScrollPane( panel );
this.setContentPane(scrollPane);
}
public static void main(String arg[])
{
JFrame frame = new hinhnen();
frame.setVisible(true);
}
}
Xin thầy xem dùm em.Em xin cám ơn
## yinyang said
bạn extends lớp từ JFrame. JFrame là super class của lớp hinhnen này.
Nếu bạn gọi super.velenhinh(gra) thì sẽ báo lỗi bởi JFrame ko có method velenhinh. Bạn hãy bỏ từ khóa super đi hoặc thay bằng this.
Có lẽ bạn định viết đệ quy ở đây hả??
## Thuy said
thầy chỉ giúp em cách thay đổi màu nền của frame khi nhấn button bằng ngôn ngữ C#.
## vovanhai said
private void Form1_Load(object sender, System.EventArgs e) {
this.BackColor = Color.FromArgb(255, 0, 0, 255);
}
## nguyen dinh thang said
chao thay a,em hoc rat do mon ja va khong biet vi no qua kho hay do em nhac hoc nua,
nam nay em hoc nam hai roi,dang hoc mon java nang cao,thay no con kho hon nen em quyet dinh hoc lai mon java1 lieu co kip khong thay.
thay co the cho em cac vi du ve GUI dc khong a,cang nhieu vi du cang tot nha thay.
em chan thanh cam on thay
## Tien Dung said
Em chào thầy !
Em dùng Netbean 6.8. Em đã code như thầy hướng dẫn thế nhưng Frame vẫn không có nền. Thầy xem và giải thích giúp em
Em chân thành cảm ơn thầy
package GiaoDien;
import java.awt.Dimension;
import java.awt.*;
import javax.swing.ImageIcon;
import javax.swing.*;
import javax.swing.JScrollPane;
/**
*
* @author Administrator
*/
public class PaintFrame1 extends javax.swing.JFrame {
private static final long serialVersionUID = 1L;
JScrollPane scrollPane;
ImageIcon img;
/** Creates new form PaintFrame */
public PaintFrame1() {
// initComponents();
img = new ImageIcon(“dk.png”);
JPanel panel = new JPanel(){
public void paintComponent(Graphics g){
Dimension d = getSize();
g.drawImage(img.getImage(),0,0, d.width,d.height,null);
setOpaque(false);
super.paintComponent(g);
}
};
JButton button = new JButton( “Hello world”);
panel.add( button );
scrollPane = new JScrollPane(panel);
setContentPane(scrollPane);
}
public static void main(String[] args) {
PaintFrame1 pf = new PaintFrame1();
pf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pf.setSize(300, 300);
pf.setVisible(true);
}
}
## Võ Văn Hải said
Xem lại đường dẫn file hình là OK.
## longdoan89 said
@Tiến Dũng: bạn xem lại chỗ dấu “”. Bạn copy nguyên theo code của Thầy thì sẽ bị sai dấu “”. Bạn xóa đi và gõ lại bình thường là sẽ được! Tương tự cho chữ “Hello world”
@Thầy: Cảm ơn thầy nhiều về code Java! em thấy thích thú với môn này!
## Duy said
Dưởng như chỉ toàn copy, không ai thèm tự đánh nên mới ra lỗi nhiều vậy thôi. Bài trên rất hữu dụng cho việc thiết kế, lại 1 điều hay mà mình được biết, cám ơn bạn nhiều
## trung said
Thưa thầy, cho em hỏi một vấn đề :
dùng image làm background trong swing, nhưng khi cho di chuyển 1 đối tượng trên backgruond (vd: trái banh lăn) : mỗi lần đối tượng di chuyển, bóng của nó không được xóa đi mà vẫn còn ở vị trí cũ.
Vd: trái banh chạy trên màn hình, khi trái banh di chuyển hết mọi bề mặt của màn hình, cuối cùng nền chỉ toàn là hình của trái banh.
phải làm cách nào để không để lại dấu vết sau mỗi lần di chuyển?
## Võ Văn Hải said
em dùng component.repaint() để vẽ lại.
## Lê Khương Mạnh Tuấn Hùng said
Em nghĩ thầy nên sharing coding để tụi em học hỏi hic hic
## hinh nen dien thoai said
Thầy cho em hỏi là dùng Swing rồi thì có nên dùng luôn AWT không thầy? (vì thấy thầy import AWT)
## Võ Văn Hải said
SWING và AWT không loại trừ nhau. Trên Swing bạn vẫn phải dùng các object có trong AWT rất nhiều.
## Chinh Duc said
Em cảm ơn thầy vì bài viết rất bổ ích
## Chinh Duc said
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.*;
public class Server extends JFrame
{
private static final long serialVersionUID = 1L;
JLabel lbserver;
JLabel lbcongport;
JLabel lbclientconnect; //client connected
JLabel lbdatarececlient; //data receipt from client
JLabel lbdatasendclient; //data send to client
JButton btnexit;
JTextArea txtclientconnect;
JTextArea txtdatarececlient;
JTextArea txtdatasendclient;
JTextField txfport;
ImageIcon icon;
public Server()
{
setTitle(“Chat Server”);
setSize(1000,700);
icon = new ImageIcon(“images/nen.jpg”);
JPanel paintpanel = new JPanel()
{
public void paintComponent(Graphics g)
{
Dimension d = getSize();
g.drawImage(icon.getImage(), 0, 0, d.width, d.height, null);
setOpaque(false);
super.paintComponent(g);
}
};
JPanel title = new JPanel();
lbserver = new JLabel(“Server”);
lbserver.setFont(new Font(“Arials “,Font.BOLD,40));
title.add(lbserver);
this.add(title, BorderLayout.NORTH);
//Lam 1 panel de nhap server port
JPanel port = new JPanel();
txfport = new JTextField(“”, 5);
txfport.enable(false);
lbcongport = new JLabel(“Server Port: “);
lbcongport.setFont(new Font(“Arials “,Font.BOLD,13));
port.add(lbcongport);
port.add(txfport);
this.add(port, BorderLayout.WEST);
//Lam 1 panel de chua button exit
JPanel exit = new JPanel();
btnexit = new JButton(“Exit Server”);
exit.add(btnexit);
btnexit.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
// TODO Auto-generated method stub
System.exit(0);
}
});
this.add(exit, BorderLayout.EAST);
//Lam 1 panel de chua cac textarea the hien luong data
JPanel data = new JPanel();
data.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
//Client Connected
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
lbclientconnect = new JLabel(“Client connected”);
lbclientconnect.setFont(new Font(“Arials “,Font.BOLD,14));
data.add(lbclientconnect, gbc);
gbc.gridx = 1;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.weightx = 0.1;
txtclientconnect = new JTextArea(27, 18);
txtclientconnect.enable(false);
data.add(txtclientconnect, gbc);
//Data send to client
gbc.gridx = 3;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
lbdatasendclient = new JLabel(“Data send to client”);
lbdatasendclient.setFont(new Font(“Arials “,Font.BOLD,14));
data.add(lbdatasendclient, gbc);
gbc.gridx = 3;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.weightx = 0.1;
txtdatasendclient = new JTextArea(27, 22);
txtdatasendclient.enable(false);
data.add(txtdatasendclient, gbc);
//Data receipt from client
gbc.gridx = 2;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
lbdatarececlient = new JLabel(“Data receipt from client”);
lbdatarececlient.setFont(new Font(“Arials “,Font.BOLD,14));
data.add(lbdatarececlient, gbc);
gbc.gridx = 2;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.weightx = 0.1;
txtdatarececlient = new JTextArea(27, 22);
txtdatarececlient.enable(false);
data.add(txtdatarececlient, gbc);
this.add(data, BorderLayout.CENTER);
}
public static void main(String []args)
{
Server chatserver = new Server();
chatserver.setDefaultCloseOperation(chatserver.EXIT_ON_CLOSE);
chatserver.setVisible(true);
}
}
Thưa thầy, thầy cho em hỏi sao bài của em lại ko hiển thị dc hình nền ạ?
## Võ Văn Hải said
Bị đè lên rồi còn đâu.
Em nên dùng this.getToolkit().getImage(“imgs/xxx.jpg”) thay vì dùng ImageIcon.
## Phạm Khánh Hoà said
thầy ơi em cũng gặp trường hợp như bạn trên thầy có thể sửa lại bài thầy theo this.getToolkit().getImage(“imgs/xxx.jpg”) thay vì dùng ImageIcon cho em xem với đc ko ạ em cũng bị đè rồi
## Thương Tín said
Cảm ơn Thầy .Bài viết hay Thật !
## Phatdatit01 said
anh ơi cho em hỏi làm sao mình có thể ghi tọa độ di chuyển của quả bóng ra một file txt được vậy.
chương trình của em có 3 class
class này chứa các button điều khiển quả bóng
import java.awt.*;
import java.awt.event.*;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.*;
public class Controller extends JFrame {
JPanel buttonPanel = new JPanel();
JButton runButton = new JButton(“Run”);
JButton stopButton = new JButton(“Stop”);
Timer timer;
Model model = new Model();
View view = new View(model);
public void init() {
layOutComponents();
attachListenersToComponents();
// Connect model and view
model.addObserver(view);
}
private void layOutComponents() {
setLayout(new BorderLayout());
this.add(BorderLayout.SOUTH, buttonPanel);
buttonPanel.add(runButton);
buttonPanel.add(stopButton);
stopButton.setEnabled(false);
this.add(BorderLayout.CENTER, view);
}
private void attachListenersToComponents() {
runButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
runButton.setEnabled(false);
stopButton.setEnabled(true);
timer = new Timer(true);
timer.schedule(new Strobe(), 0, 40); // 25 times a second
} });
stopButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
runButton.setEnabled(true);
stopButton.setEnabled(false);
timer.cancel();
}
});
}
private class Strobe extends TimerTask {
public void run() {
model.setLimits(view.getWidth(), view.getHeight());
model.makeOneStep();
}
}
}
class này chứa thông tin quả bóng
import java.awt.*;
import java.util.*;
import javax.swing.JPanel;
class View extends JPanel implements Observer {
Model model;
View(Model model)
{
this.model = model;
}
public void paint(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.RED);
g.fillOval(model.getX(), model.getY(),model.BALL_SIZE, model.BALL_SIZE);
g.setFont(new Font(“Courier New”, Font.PLAIN, 12));
g.drawString(“Ball ” + model.toString(), 20, 30);
}
public void update(Observable obs, Object arg) {
repaint();
}
}
class này chứa hàm main
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Observable;
import java.util.Formatter;
import javax.swing.JFrame;
//lớp nay chứa thong tin trái banh
public class Model extends Observable {
public final int BALL_SIZE = 20;
private StringBuilder sb = new StringBuilder();
private Formatter formatter = new Formatter(sb);
public int xPosition = 0;
public int yPosition = 0;
public int xLimit, yLimit;
public int xDelta = 6; //độ dịch chuyển của trái banh
public int yDelta = 4;
public void setLimits(int xLimit, int yLimit) {
this.xLimit = xLimit – BALL_SIZE;
this.yLimit = yLimit – BALL_SIZE;
}
public int getX() {
return xPosition;
}
public int getY() {
return yPosition;
}
public void makeOneStep() {
xPosition += xDelta;
if (xPosition = xLimit) {
xDelta = -xDelta;
xPosition += xDelta;
}
yPosition += yDelta;
if (yPosition = yLimit) {
yDelta = -yDelta;
yPosition += yDelta;
}
setChanged(); //cho view biết trái banh thay đổi
notifyObservers();
}
public String toString() {
sb.delete(0, sb.length());
formatter.format(“(%d,%d) r=%d V=(%d,%d) ” , xPosition, yPosition,BALL_SIZE, xDelta, yDelta);
return sb.toString();
}
// Re-use to build the formatted string for toString()
public static void main(String[] args) throws IOException {
Controller controllerApp = new Controller();
controllerApp.init();
controllerApp.setSize(300, 300);
controllerApp.setVisible(true);
controllerApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
## Lan said
thầy ơi em muốn thay đổi màu nền của một panel thì em phải làm như thế nào à khi em thay doi cac gia tri tren slider a

Server: nginx

Vary: Cookie

X-hacker: If you're reading this, you should visit automattic.com/jobs and apply to join the fun, mention this header.

Link: <http://wp.me/P8bq9-ey>; rel=shortlink

X-ac: 1.dca _dca


markdown:
## Main menu
[About Theo](/about-theo) [Factory and Tours](/factory-and-tours) [News](/blogs-web) [All Things Chocolate](/all-things-chocolate)
|Price:||$4.00|
By popular demand, we’ve created a dark chocolate version of this fan favorite. We start with the finest 70% dark chocolate and add the irresistible crunch of almonds with just the right amount of salt. The result is the ultimate sweet and salty crunch, in perfect balance. Organic, Fair for Life and Non-GMO Project certified. Bar size: 3oz.
**Allergen Information: CONTAINS TREE NUTS (ALMONDS).** Manufactured on shared equipment with products containing milk, eggs, wheat, peanuts & other nuts.
Cocoa Beans*+, Sugar*+, Almonds*, Cocoa Butter*+, Fleur de Sel, Ground Vanilla Bean*.
*Organic
+Fair Trade
**Allergen Information: CONTAINS ALMONDS. **Manufactured on shared equipment with products containing milk, eggs, wheat, peanuts & other nuts.
Orders placed before 12 noon Pacific Time will ship the following business day when temperatures allow. We cannot ship to a PO Box and do not ship internationally at this time.
We'd never want your order sitting in a shipping facility over the weekend where it could be exposed to high temperatures when the weather is warm. For that reason, we will hold your package if we feel it could be compromised. Most orders placed on Thursday or Friday will be held until the following Monday to ship when temperatures exceed 70 degrees.
To view our shipping policy,
[please click here](http://www.theochocolate.com/shipping-policy).
There are no messages to display.

WARC-Type: response

Content-Type: application/http; msgtype=response

Vary: Accept-Encoding, Cookie, Cookie

Cache-Control: public, max-age=0

Content-Type: text/html; charset=utf-8

Content-Encoding: gzip

X-Styx-Version: StyxGo

X-Drupal-Cache: MISS

Content-Language: en

Accept-Ranges: bytes

X-Generator: Drupal 7 (http://drupal.org)

Via: 1.1 varnish

Connection: close


markdown:
# Ngành khoa học môi trường sau khi tốt nghiệp có thể làm việc ở đâu?
Thảo luận trong '
[HƯỚNG NGHIỆP - NGHỀ MÔI TRƯỜNG](forums/huong-nghiep-nghe-moi-truong.131/)' bắt đầu bởi [vannam](members/vannam.26159/), [23/7/11](threads/nganh-khoa-hoc-moi-truong-sau-khi-tot-nghiep-co-the-lam-viec-o-dau.14038/).
Trả lời: 8 / Đọc: 18,326
Thảo luận trong '
[HƯỚNG NGHIỆP - NGHỀ MÔI TRƯỜNG](forums/huong-nghiep-nghe-moi-truong.131/)' bắt đầu bởi [vannam](members/vannam.26159/), [23/7/11](threads/nganh-khoa-hoc-moi-truong-sau-khi-tot-nghiep-co-the-lam-viec-o-dau.14038/).
Trả lời: 8 / Đọc: 18,326

Cache-control: private, max-age=0

Set-Cookie: xf_session=877b9de6abcdbaf31af9e7bf7a5bbe4f; path=/; secure; httponly

X-Frame-Options: SAMEORIGIN

Vary: Accept-Encoding,User-Agent

Content-Type: text/html; charset=UTF-8